#!/usr/bin/env python
import sys
from pdw.parse_composer_data import *
from pdw.copyright import *

def run_analysis():
    filepath = './data/composers.txt'
    results = parse_file(filepath)
    unknowns = []
    incopy = []
    outcopy = []
    for item in results:
        status = analyse(item)
        if status == CopyrightStatus.UNKNOWN:
            unknowns.append(item)
        elif status == CopyrightStatus.OUT:
            outcopy.append(item)
        elif status == CopyrightStatus.IN:
            incopy.append(item)
        else:
            raise Exception('Undefined status')
    return (outcopy, incopy, unknowns)

def pprint_info(info):
    # name = info['lname'] + ', ' + info['fname']
    name = info['fullname'].strip()
    ddate_str = info['ddate'].ljust(10)
    row = '%s, %s' % (ddate_str, name)
    print row

def pprint_composers(composer_list):
    # straight lexicographic sort on the death date strings will work
    def get_ddate(info):
        ddate = info['ddate']
        if ddate.startswith('c'):
            ddate = ddate[1:]
        return ddate
    def ddate_cmp(info1, info2):
        ddate1 = get_ddate(info1)
        ddate2 = get_ddate(info2)
        return cmp(ddate1, ddate2)
    composer_list.sort(ddate_cmp)
    for item in composer_list:
        pprint_info(item)

if __name__ == '__main__':
    usage = '''
List information about composers whose works are in and out of copyright.

%(prog)s [ stats | outcopyright | incopyright | unknown ] 

    stats: print out statistics about composers in each category
    other items: print out information about composers in each category
'''
    outc, inc, unk = run_analysis()
    if len(sys.argv) < 2:
        print usage
        sys.exit(1)
    cmd = sys.argv[1]
    if cmd == 'stats':
        print 'Out of Copyright: ', len(outc)
        print 'In Copyright:     ', len(inc)
        print 'Status Unknown:   ', len(unk)
    elif cmd == 'outcopyright':
        pprint_composers(outc)
    elif cmd == 'incopyright':
        pprint_composers(inc)
    elif cmd == 'unknown':
        pprint_composers(unknown)
    else:
        print '\n\t** ERROR ** Unknown Argument: %s' % cmd
        print usage
        sys.exit(1)

