#!/usr/bin/env python3

__author__ = 'RemiZOffAlex'
__copyright__ = '(c) RemiZOffAlex'
__email__ = 'remizoffalex@mail.ru'

import os
import sys
import argparse
import traceback

sys.path.insert(0, '/'.join(os.path.dirname(os.path.abspath(__file__)).split('/')[:-1]))

from myapp import app, lib, models


def main():
    parser = argparse.ArgumentParser(
        description='Скрипт добавления пользователя',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )
    parser._optionals.title = "Необязательные аргументы"

    parser.add_argument("--user", dest="user", required=True, help="Новый пользователь")
    parser.add_argument("--password", dest="password", help="Новый пароль")

    args = parser.parse_args()

    user = models.db_session.query(
        models.User
    ).filter(
        models.User.name == args.user
    ).first()
    if user:
        app.logger.warning('Пользователь %s уже существует' % args.user)
        sys.exit(1)
    user = models.User(args.user)
    if args.password is None:
        args.password = lib.pwgen()
        print('Пароль пользователя: {}'.format(args.password))
    user.password = lib.get_hash_password(
        args.password,
        app.config['SECRET_KEY']
    )
    user.disabled = False
    models.db_session.add(user)
    models.db_session.commit()
    app.logger.info('Пользователь %s успешно добавлен' % args.user)

if __name__ == "__main__":
    try:
        main()
    except Exception as err:
        traceback.print_exc(file=sys.stdout)
        exit(1)

    exit(0)
