#!/usr/bin/env python3

# coding: utf-8
"""
Закрепление виртуальной машины за администратором.
"""

import os
import sys

# чтобы сработал запуск из другой директории и импорт всего чего надо
for func in (os.chdir, sys.path.append):
    func('/opt/crm')

from patch.include import *


def parse_args():
    """ Разбор аргументов"""
    parser = argparse.ArgumentParser()
    parser.description = "Удаляем тестовых лидов созданных для проверки выдачи VM."
    parser.add_argument('--admin', required=True, type=str, help='Email администратора')
    parser.add_argument('--phone', required=True, type=str, help='Телефон администратора')
    parser.add_argument('--company-name', required=True, type=str, help='Название компании')
    parser.add_argument('--user-name', required=False, type=str, help='ФИО', default=None)
    parser.add_argument('--hostname', required=True, type=str, help='Запрашиваемый адрес CRM')
    parser.add_argument('--vm-type', type=str, help='Чтобы кинуть $@ и не разбираться с unknown args')
    parser.add_argument('--landing-project', type=str, help='Установим лицензию')
    return parser.parse_args()


def rename_org(company_name):
    company = models.CmfCompany.get(name='default.company')
    assert company, "Не найдена стандартная запись о компании"
    company.name = company_name.replace('_', ' ')
    company.save()


def update_admin(email, phone, name):
    admin = models.CmfPerson.get(login=email, fields=['phone'])
    assert admin, f"Не найдена учётная запись администратора CRM {email}"
    admin.phone = phone
    if name:
        admin.name = name.replace('_', ' ')
    admin.save()


def patch_emails(hostname):
    for person in models.CmfPerson.list(filter=['email', 'LIKE', '%default.company'], fields=['email']):
        person.email = person.email.value.replace('default.company', hostname)
        person.save()


def add_license_from_landing(landing_project):
    landing_code = 'eva24'
    if landing_project in ('eva24', 'evaproject', 'evawiki'):
        landing_code = landing_project
    models.CmfLicense.landing_page2license(code=landing_code)


@app_context(commit=True)
def main():
    logging.basicConfig(level=logging.INFO, format="%(message)s")
    args = parse_args()
    rename_org(args.company_name)
    update_admin(args.admin, args.phone, args.user_name)
    patch_emails(args.hostname)
    add_license_from_landing(args.landing_project)
    # commit()
    # commit нужен перед синхронизацией, которая нужна чтобы прописать mycrm:Users mycrm:Admins
    models.CmfPerson.account_sync_users.apply()


if __name__ == '__main__':
    main()
