#!/usr/bin/env python3

import argparse

import mo.db as db
import mo.jobs.score
from mo.util import die, init_standalone
from sqlalchemy.orm import joinedload

parser = argparse.ArgumentParser(description='Publikuje oficiální výsledkové listiny na webu MO')
parser.add_argument('--year', type=int, required=True, metavar='YY', help='ročník olympiády')
parser.add_argument('--cat', type=str, metavar='C', help='kategorie (nepovinná)')
parser.add_argument('--seq', type=int, metavar='S', help='pořadí kola (nepovinné)')
parser.add_argument('-n', '--dry-run', default=False, action='store_true', help='pouze ukáže, co by bylo provedeno')

args = parser.parse_args()

init_standalone()
sess = db.get_session()

round_query = sess.query(db.Round).filter_by(year=args.year)
if args.cat is not None:
    round_query = round_query.filter_by(category=args.cat)
if args.seq is not None:
    round_query = round_query.filter_by(seq=args.seq)
rounds = round_query.order_by(db.Round.category, db.Round.seq, db.Round.part).all()

for round in rounds:
    print(round.round_code(), ": ", sep="", end="")
    if round.is_subround():
        print('Sekundární kolo')
        continue
    if not round.export_score_to_mo_web:
        print('Nemá povolený export')
        continue
    if round.round_type == db.RoundType.other:
        print('Nemá nastavený typ')
        continue
    print('OK')

    for contest in sess.query(db.Contest).filter_by(round=round).options(joinedload(db.Contest.place), joinedload(db.Contest.scoretable)).all():
        print(f'\t{contest.place.code}: ', end="")
        if contest.scoretable is None:
            print('Nemá výsledkovku')
        elif args.dry_run:
            print('Publikoval bych')
        else:
            print('Publikuji')
            mo.jobs.score.schedule_export_score_to_mo_web(contest, contest.scoretable)

if not args.dry_run:
    sess.commit()