#!/usr/bin/env python3

import argparse

import mo.db as db
import mo.util
from mo.util import die, init_standalone

parser = argparse.ArgumentParser(description='Založí soutěže pro dané kolo')
parser.add_argument(dest='round', type=str, metavar='YY-C-S[p]', help='kód kola')
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_code = mo.util.RoundCode.parse(args.round)
if round_code is None:
    die("Chybná syntaxe kódu kola")
round = mo.util.get_round_by_code(round_code)
if round is None:
    die("Kolo s tímto kódem neexistuje!")

if round.state != db.RoundState.delegate:
    state = round.state
else:
    state = db.RoundState.preparing

if round.is_subround():
    # Pokud je to podkolo, kopírujeme soutěže z hlavního kola
    for mc in sess.query(db.Contest).filter_by(round=round.master):
        r = mc.place
        print(f"Zakládám {round.round_code()} pro místo {r.name} (podsoutěž)")

        if not args.dry_run:
            c = db.Contest(round=round, place=r, master=mc, state=state)

            sess.add(c)
            sess.flush()

            mo.util.log(db.LogType.contest, c.contest_id, {
                'action': 'created',
            })

else:
    regions = sess.query(db.Place).filter_by(level=round.level).all()
    assert regions, "Neexistují žádná místa dané úrovně"

    for r in regions:
        print(f"Zakládám {round.round_code()} pro místo {r.name}")
        if not args.dry_run:
            c = db.Contest(round=round, place=r, state=state)

            sess.add(c)
            sess.flush()
            c.master = c

            mo.util.log(db.LogType.contest, c.contest_id, {
                'action': 'created',
            })

if not args.dry_run:
    sess.commit()