#!/usr/bin/python

import argparse
import sys
from datetime import datetime

from qrbill import QRBill

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--output')
    parser.add_argument('--account', required=True)
    parser.add_argument('--creditor-name', required=True)
    parser.add_argument('--creditor-street')
    parser.add_argument('--creditor-housenumber')
    parser.add_argument('--creditor-postalcode', required=True)
    parser.add_argument('--creditor-city', required=True)
    parser.add_argument('--creditor-country', default='CH')
    parser.add_argument('--ucreditor-name')
    parser.add_argument('--ucreditor-street')
    parser.add_argument('--ucreditor-housenumber')
    parser.add_argument('--ucreditor-postalcode')
    parser.add_argument('--ucreditor-city')
    parser.add_argument('--ucreditor-country', default='CH')
    parser.add_argument('--amount')
    parser.add_argument('--currency', default='CHF')
    parser.add_argument('--due-date')
    parser.add_argument('--debtor-name')
    parser.add_argument('--debtor-street')
    parser.add_argument('--debtor-housenumber')
    parser.add_argument('--debtor-postalcode')
    parser.add_argument('--debtor-city')
    parser.add_argument('--debtor-country', default='CH')
    parser.add_argument('--reference-number')
    parser.add_argument('--extra-infos')
    parser.add_argument('--language', default='en')

    args = parser.parse_args()
    creditor = {
        'name': args.creditor_name, 'street': args.creditor_street,
        'house_num': args.creditor_housenumber, 'pcode': args.creditor_postalcode,
        'city': args.creditor_city, 'country': args.creditor_country,
    } if args.creditor_name else None
    final_creditor = {
        'name': args.ucreditor_name, 'street': args.ucreditor_street,
        'house_num': args.ucreditor_housenumber, 'pcode': args.ucreditor_postalcode,
        'city': args.ucreditor_city, 'country': args.ucreditor_country,
    } if args.ucreditor_name else None
    debtor = {
        'name': args.debtor_name, 'street': args.debtor_street,
        'house_num': args.debtor_housenumber, 'pcode': args.debtor_postalcode,
        'city': args.debtor_city, 'country': args.debtor_country,
    } if args.debtor_name else None

    if args.output and not args.output.endswith('.svg'):
        sys.exit("Error: The output file name should end with .svg")

    try:
        bill = QRBill(
            account=args.account,
            creditor=creditor,
            final_creditor=final_creditor,
            amount=args.amount,
            currency=args.currency,
            due_date=args.due_date,
            debtor=debtor,
            ref_number=args.reference_number,
            extra_infos=args.extra_infos,
            language=args.language,
        )
    except ValueError as err:
        sys.exit("Error: %s" % err)

    if args.output:
        out_path = args.output
    else:
        out_path = "{}-{}.svg".format(
            args.account.replace(' ', ''),
            datetime.now().strftime("%Y-%m-%d_%H:%M:%S")
        )
    bill.as_svg(out_path)
