#!/usr/bin/env python3

import argparse

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

parser = argparse.ArgumentParser(description='Založí soutěžní kolo')
parser.add_argument('-y', '--year', type=int, required=True, help='ročník')
parser.add_argument('-c', '--cat', type=str, required=True, help='kategorie')
parser.add_argument('-s', '--seq', type=int, required=True, help='pořadí kola')
parser.add_argument('-l', '--level', type=int, required=True, help='úroveň v hierarchii oblastí')
parser.add_argument('-p', '--part', type=int, default=0, help='část v rámci skupiny kol (default: 0)')
parser.add_argument('-n', '--name', type=str, required=True, help='název kola')
parser.add_argument('-S', '--step', type=float, default=1, help='bodovací krok (default: 1)')

args = parser.parse_args()

mo.util.init_standalone()
sess = db.get_session()

if args.part > 1:
    master_rnd = sess.query(db.Round).filter_by(year=args.year, category=args.cat, seq=args.seq, part=1).one_or_none()
    if master_rnd is None or master_rnd.is_subround():
        die("Nemohu nalézt hlavní kolo")
    if master_rnd.level != args.level:
        die("Hlavní kolo probíhá na odlišné úrovni hierarchie")
else:
    master_rnd = None

rnd = db.Round(
    year=args.year,
    category=args.cat,
    seq=args.seq,
    part=args.part,
    level=args.level,
    name=args.name,
    points_step=args.step,
)

sess.add(rnd)
sess.flush()

if master_rnd is not None:
    rnd.master_round_id = master_rnd.round_id
else:
    rnd.master_round_id = rnd.round_id

mo.util.log(
    type=db.LogType.round,
    what=rnd.round_id,
    details={
        'action': 'created',
        'new': db.row2dict(rnd),
    },
)

sess.commit()