#!/usr/bin/env python3

import argparse
import logging
import os
import scanner
import time
from scanner import thread_scanner
from datetime import datetime


def configure_logging(log_file, level=logging.INFO):
    logging.basicConfig(format='[%(asctime)s] -- %(levelname)s: %(message)s', datefmt='%Y%m%d-%H%M%S', filename=log_file, level=level)
    stdout_handler = logging.StreamHandler()
    stdout_handler.setFormatter(logging.Formatter(fmt='[%(asctime)s] -- %(levelname)s: %(message)s', datefmt='%Y%m%d-%H%M%S'))
    logging.getLogger().addHandler(stdout_handler)
    return logging.getLogger()


def main():
    # Arguments parsing and validation
    parser = argparse.ArgumentParser()
    parser.add_argument("keywords_file",
                        help="file with the keywords to search for")
    parser.add_argument("-o", "--output", help="Specify output folder")
    parser.add_argument("-w", "--wait-time",
                        help="Time to wait between each scan in minutes. "
                             "Default is 5 minutes")
    parser.add_argument("-q", "--quota",
                        help="Exit when specified size quota "
                             "is exceeded. Ex: 500MB, 30GB etc...")
    args = parser.parse_args()

    # Checking keywords file
    if not os.path.isfile(args.keywords_file):
            print("Keywords file does not exist...")
            exit(1)

    if args.output:
        output = args.output
        if not os.path.exists(output):
            print("{0} Does not exist.".format(output))
            exit(1)
    else:
        output = os.getcwd()

    # Checking for quota
    if args.quota:
        if "gb" in args.quota.lower():
            quota_mb = args.quota.lower().split('g')[0] * 1000
        elif "mb" in args.quota.lower():
            quota_mb = args.quota.lower().split('m')[0]
        else:
            print("Quota format invalid. Valid example: 20GB, 700MB etc...")
            exit(1)
    else:
        quota_mb = False

    # Checking for sleep time
    if args.wait_time:
        wait_time = int(args.wait_time) * 60
    else:
        wait_time = 300

    # Setting up logger
    logger = configure_logging("./{}_4scanner.log".format(datetime.now().strftime('%Y%m%d_%H%M%S')))

    t_scanner = thread_scanner.thread_scanner(args.keywords_file, output, quota_mb, wait_time, logger)
    t_scanner.scan()

if __name__ == '__main__':
    try:
            main()
    except KeyboardInterrupt:
        pass
