#!/usr/bin/env python3
# Přehled všech organizátorských účtů

from dataclasses import dataclass
from sqlalchemy.orm import joinedload
import sys

import mo.csv
import mo.db as db

sess = db.get_session()

orgs = (sess.query(db.User)
        .filter_by(is_org=True)
        .options(joinedload(db.User.roles).joinedload(db.UserRole.place))
        .all())


@dataclass
class Row:
    jmeno: str
    email: str
    last_login: str
    role: str = ""
    kod_souteze: str = ""
    kod_mista: str = ""
    misto: str = ""


output = []
for user in sorted(orgs, key=lambda u: u.sort_key()):

    def row() -> Row:
        return Row(
            jmeno=user.full_name(),
            email=user.email,
            last_login=(user.last_login_at.strftime('%Y-%m-%d') if user.last_login_at is not None else '-'),
        )

    if user.roles:
        for r in sorted(user.roles, key=lambda r: (r.role, r.category or "", r.year or -1, r.seq or -1, r.place_id or -1)):
            o = row()
            o.role = r.role
            o.kod_souteze = f"{r.category or '*'}-{r.year or '*'}-{r.seq or '*'}"
            p = r.place
            o.kod_mista = p.get_code()
            o.misto = p.type_name() + " " + p.name
            output.append(o)
    else:
        o = row()
        o.role = '-'
        output.append(o)

mo.csv.write(sys.stdout, mo.csv.FileFormat.en_csv, Row, output)