#!/usr/bin/env python3

import argparse

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

parser = argparse.ArgumentParser(description='Smaže všechny submity uživatele v aktuálním ročníku')
parser.add_argument('--uid', type=int, required=True, help='user_id')
parser.add_argument('-n', '--dry-run', default=False, action='store_true', help='mazání jenom simuluje')

args = parser.parse_args()
action = "Smažu" if args.dry_run else "Mažu"

init_standalone()
sess = db.get_session()

user = sess.query(db.User).get(args.uid)
if user is None:
    die(f'Uživatel s UID {args.uid} neexistuje')

print(f'{action} odevzdaná řešení uživatele {user.full_name()} <{user.email}>')

task_subq = (sess.query(db.Task.task_id)
             .join(db.Round)
             .filter(db.Round.year == config.CURRENT_YEAR))

sols = (sess.query(db.Solution)
        .filter_by(user=user)
        .filter(db.Solution.task_id.in_(task_subq))
        .all())

for sol in sols:
    print(f'{action} řešení úlohy #{sol.task_id} {sol.task.code} ({sol.task.name})')
    sess.delete(sol)

papers = (sess.query(db.Paper)
          .filter_by(for_user_obj=user)
          .filter(db.Paper.for_task.in_(task_subq))
          .all())

for paper in papers:
    print(f'{action} papír #{paper.paper_id} (úloha #{paper.for_task}, odevzdáno {paper.uploaded_at})')
    sess.delete(paper)

log(
    type=db.LogType.participant,
    what=user.user_id,
    details={
        'action': 'delete-submits',
        'reason': 'script',
    },
)

if not args.dry_run:
    sess.commit()