#!/bin/bash
set -eu
### --help Info: регистрация администратора в новой установке
### --help Usage:
### --help Example:
. /opt/fox_utils/crab_sys.sh
sys::arg_parse "$@"

declare ADMIN_EMAIL
declare DOMAIN
declare ADMIN_MOBILE
. /opt/CONFIG

register_in_eva(){
	touch /opt/eva-app/custom/greetings_doc_id.txt

	echo "Заводим пользователя ${ADMIN_EMAIL} в сервисе eva..."
	# python3 /opt/eva-app/bin/assign.d/vm.py --admin="$ADMIN_EMAIL" || true
	# /opt/eva-app/bin/assign.d/branding.py --admin="$ADMIN_EMAIL" \
	#        --company-name="$DOMAIN" --hostname="" --phone="${ADMIN_MOBILE:-+79999999999}"
	cd /opt/eva-app
	cat <<EOF | python3 manage.py shell
from cmf.include import *
auth = models.CmfAuth.get(login="${ADMIN_EMAIL}", fields=['*'])
if auth and auth.pass_hash:
	print("Пользователь ${ADMIN_EMAIL} уже заведен и назначен пароль!")
else:
	import hashlib
	password='servicemode'
	if not auth:
		auth = models.CmfAuth(login="${ADMIN_EMAIL}",email="${ADMIN_EMAIL}",phone="+79999999999")
	salt = type(auth).gen_salt()
	hash = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100_000)
	auth.set_pass_hash_bytes(hash, salt)
	auth.save()
email = "${ADMIN_EMAIL}"

admin = models.CmfPerson.get(login=email)
if admin:
	print('Учетная запись администратора для ${ADMIN_EMAIL} уже заведена!')
	print('Выставим ему повторно права администратора')
else:
	def_admin = 'default.admin@crm.evacrm.ru'
	admin = models.CmfPerson.get(login=def_admin,fields=['login', 'email', 'phone', 'rg_member_of'])
if not admin:
	print('Учетная запись администратора уже была заведена на другой email!')
	print('Создадим новую учетную запись.')
	admin = models.CmfPerson()

admin.code = admin.login = admin.email = email
admin.name = email.split('@')[0]
admin.rg_member_of = ['Admins', 'Users', 'IBAdmins']
admin.save()

print("Устанавливаем имя компании")
company = models.CmfCompany.get(name='default.company')
if not company:
	print("Не найдена стандартная запись о компании, вероятно она уже переименована")
else:
	company_name = "${DOMAIN}"
	company.name = company_name.replace('_', ' ')
	company.save()

# Обновляем emailы
for person in models.CmfPerson.list(filter=['email', 'LIKE', '%default.company'], fields=['email']):
	person.email = person.email.value.replace('default.company', '${DOMAIN}')
	person.save()

EOF

	LOAD=0 /opt/eva-app/bin/assign.d/prepare.py --admin="$ADMIN_EMAIL" || true
	echo "Синхронизируем базу пользователей..."
	cd /opt/eva-app
	python3 manage.py shell \
		'from cmf.include import *; models.CmfPerson.account_sync_users.apply()' || true
	return 0
}

main(){
	echo "Проверим конфигурацию системы..."
	/opt/bin/eva_configure
	register_in_eva
	return 0
}

main
exit 0
