#! /opt/imh-python/bin/python
""" Scan for first mention of string in URL. """

import re
import sys
import logging
from argparse import ArgumentParser
from rads.common import colors
from rads.common import setup_logging
from strace_tools import strace_url
import json

__author__ = "Daniel K"
__email__ = "danielk@inmotionhosting.com"

LOGGER = logging.getLogger(__name__)
TEXT = ""


def colorize(text, color, end='none'):
    """Apply a color to text data"""
    return '%s%s%s' % (colors()[color], text, colors()[end])


def set_logging(is_quiet, verbosity, output_file):
    ''' Setup the logging in a separate function '''
    if is_quiet:
        logging_level = logging.CRITICAL
    else:
        if None is verbosity:
            logging_level = logging.ERROR
        elif 1 == verbosity:
            logging_level = logging.WARNING
        elif 2 == verbosity:
            logging_level = logging.INFO
        elif 3 == verbosity:
            logging_level = logging.DEBUG
        else:
            logging_level = logging.DEBUG

    if output_file == '':
        setup_logging(loglevel=logging_level, print_out=sys.stderr)
    else:
        setup_logging(
            logfile=output_file,
            loglevel=logging_level,
            print_out=False
        )


def parse_args():
    ''' Parse command line arguments '''

    parser = ArgumentParser(description=__doc__)

    parser.add_argument(
        "-v", "--verbose", action='count',
        help="Print verbose output. May be added multiple times."
    )

    parser.add_argument(
        "-q", "--quiet", action='store_true',
        help="Do not output logging. Overrides -v."
    )

    parser.add_argument(
        "-o", "--output", action='store', type=str, default='',
        help="Output logging to the specified file."
    )


    parser.add_argument(
        'search', metavar='SEARCH', type=str,
        help="String to search for."
    )

    parser.add_argument(
        'url', metavar='URL', type=str,
        help="URL to scan."
    )

    args = parser.parse_args()

    if args.url is None:
        print "URL not given"
        sys.exit(1)

    set_logging(args.quiet, args.verbose, args.output)

    return args.search, args.url


def search_for_text(
        command,
        line,
        strace_handler,
        additional_data=None
):
    ''' Search for string in data '''
    if 'data' in additional_data:
        if TEXT in additional_data['data']:
            #print "From %s: [[[%s]]]" % (additional_data['filename'],additional_data['data'])
            print additional_data['filename']


def main():
    ''' Main function for scan_url '''

    (search, url) = parse_args()

    callbacks = {}

    global TEXT
    TEXT = search
    callbacks['read'] = search_for_text
    callbacks['write'] = search_for_text



    for result in strace_url(url, callbacks, False):
        pass


if __name__ == "__main__":
    main()
