import argparse
import logging

import personal_data.main
from personal_data.notification import NotificationType


def parse_arguments():
    available_scraper_names = personal_data.main.available_scraper_names()
    if len(available_scraper_names) == 0:
        msg = 'Failed to load any scrapers'
        raise Exception(msg)

    parser = argparse.ArgumentParser(
        epilog='Available fetchers: ' + ' '.join(available_scraper_names),
    )
    parser.add_argument(
        'fetchers',
        metavar='FETCHER',
        type=str,
        nargs='+',
        choices=available_scraper_names,
    )
    parser.add_argument('--cookiejar', action='store_true')
    parser.add_argument('--email', action='store_true', dest='send_email_notification')
    parser.add_argument(
        '--loud-sound',
        action='store_true',
        dest='trigger_loud_and_annoying_sound',
    )
    parser.add_argument(
        '--ignore-cache',
        action='store_true',
        dest='ignore_cache',
    )
    return parser.parse_args()


def main():
    logging.basicConfig()
    logging.getLogger('personal_data').setLevel('INFO')

    args = parse_arguments()
    scraper_filter = frozenset(args.fetchers)

    # Determine notification sounds
    notification_types = set()
    if args.send_email_notification:
        notification_types.add(NotificationType.EMAIL)
    if args.trigger_loud_and_annoying_sound:
        notification_types.add(NotificationType.LOUD_SOUND)

    personal_data.main.main(
        scraper_filter,
        use_cookiejar=args.cookiejar,
        notification_types=frozenset(notification_types),
        ignore_cache=args.ignore_cache,
    )


if __name__ == '__main__':
    main()