#!/usr/bin/python

'''For computing line intersections'''

from __future__ import division
from __future__ import print_function

import sys
import pprint

import lsa_mod

def usage(retval):
    '''Give a usage message'''
    sys.stderr.write('{}: --help --verbose --mode naive\n'.format(sys.argv[0]))
    sys.exit(retval)

def display(lsa_result):
    '''Display the results'''
    intersections = sorted(list(lsa_result.gen_intersections()))
    for intersection in intersections:
        assert len(intersection) == 2
        print('intersection {}: {}'.format(intersection[0], intersection[1]))

    overlaps = sorted(list(lsa_result.gen_overlaps()))
    for overlap in overlaps:
        assert len(overlap) == 2
        print('overlap {}: {}'.format(overlap[0], overlap[1]))

def main():
    '''Main function - for now, we just do a naive intersection computation'''

    mode = ''
    verbose = False

    while sys.argv[1:]:
        if sys.argv[1] in ['-h', '--help']:
            usage(0)
        elif sys.argv[1] in ['-v', '--verbose']:
            verbose = True
        elif sys.argv[1] == '--mode':
            mode = sys.argv[2]
            del sys.argv[1]
        else:
            sys.stderr.write('{}: Unrecognized option: {}\n'.format(sys.argv[0], sys.argv[1]))
            usage(1)
        del sys.argv[1]

    if not mode:
        sys.stderr.write('{}: You must give a --mode\n'.format(sys.argv[0]))
        usage(1)
        
    if mode not in [ 'naive' ]:
        sys.stderr.write('{}: {} is not (yet?) a valid mode\n'.format(sys.argv[0], mode))
        usage(1)

    lines = []
    for line in sys.stdin:
        fields = line.split()
        float_fields = [ float(field) for field in fields ]
        vector1 = lsa_mod.Vector(float_fields[0], float_fields[1])
        vector2 = lsa_mod.Vector(float_fields[2], float_fields[3])
        line = lsa_mod.Line(vector1, vector2, is_segment=True)
        lines.append(line)

    if verbose:
        pprint.pprint(lines)
    if mode == 'naive':
        lsa_result = lsa_mod.naive_intersections(lines, verbose)
    else:
        sys.stderr.write('{}: Internal error: unexpected mode detected: {}\n'.format(sys.argv[0], mode))

    display(lsa_result)


main()