#!/usr/bin/env python3

import argparse
import sys

import mo.db as db
import mo.email
import mo.users
import mo.util

parser = argparse.ArgumentParser(description='Založí nového uživatele')
parser.add_argument(dest='email', help='e-mailová adresa')
parser.add_argument(dest='first_name', help='křestní jméno (jedno nebo více)')
parser.add_argument(dest='last_name', help='příjmení (jedno nebo více)')
parser.add_argument('--org', default=False, action='store_true', help='přidělí uživateli organizátorská práva')
parser.add_argument('--admin', default=False, action='store_true', help='přidělí uživateli správcovská práva')
parser.add_argument('--passwd', type=str, help='nastaví počáteční heslo (jinak pošle aktivační mail)')

args = parser.parse_args()
email = mo.users.normalize_email(args.email)

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

user = session.query(db.User).filter_by(email=email).one_or_none()
if user is not None:
    print(f'Uživatel s e-mailem {email} již existuje (user_id {user.user_id}).')
    sys.exit(0)

user = db.User(
    email=email,
    first_name=args.first_name,
    last_name=args.last_name,
    is_org=args.org,
    is_admin=args.admin,
)

session.add(user)
session.flush()

mo.util.log(db.LogType.user, user.user_id, {
    'action': 'created',
    'new': db.row2dict(user),
})

if args.passwd is not None:
    mo.users.set_password(user, args.passwd)
    token = mo.users.make_activation_token(user)

session.commit()

if args.passwd is None:
    mo.email.send_new_account_email(user, token)