# coding:utf-8
'''
Created on 30 марта 2016 г.

@author: popov_v
'''
import json

from webservices.functions import getContextByMaster
from ru.curs.celesta.showcase.utils import XMLJSONConverter
from nci.functions.persons import createAccount, normalizeSnils, changePassword as changePasswordFun
from nci._nci_orm import personCursor
from common.numbersseries.getNextNo import getNextNoOfSeries
from security.functions import id_generator
from java.text import SimpleDateFormat
from security._security_orm import loginsCursor

def register(self, xmlIn):
    u'''Регистрация нового пользователя. '''
    
    out_data = {'response': ''}
    
    input_data = json.loads(XMLJSONConverter.xmlToJson(xmlIn))
    if input_data['root']['@mode'] != 'registr':
        out_data['response'] = {'b': u'Неверный режим!'}
    else:
        # создаем ФЛ
        # данные
        snils = input_data['root']['snils']
        surname = input_data['root']['surname']
        name = input_data['root']['name']
        patronymic = input_data['root']['patronymic']
        email = input_data['root']['email']
        phone = input_data['root']['phone']
        birth_date = input_data['root']['birth_date']
        sex = input_data['root']['sex']
        
        # генерируем пароль
        _password = id_generator()
        
        context = getContextByMaster()
        person = personCursor(context)
        logins = loginsCursor(context)
        # проверяем, есть ли такой пользователь по СНИЛС
        person.setRange('snils', normalizeSnils(snils))
        if person.tryFirst():
            # ФЛ найдено
            # проверяем, есть ли такой аккаунт
            logins.setFilter('userName', "'%s'|'%s'" % (snils.replace("-", "").replace(" ", ""), email))
            if not logins.tryFindSet():
                createAccount(context, person.uid, password=_password, roles=['medstaff', 'address'])
            else:
                out_data['response'] = {'b': u'Аккаунт уже существует. Для изменения пароля нажмите на ссылку "Забыли пароль?".'}
        else:
            # создаем новое ФЛ
            person.surname = surname
            person.name = name
            person.patronymic = patronymic
            person.snils = snils
            person.sex = sex
            person.email = email
            person.phone = phone
            #person.phoneExtra = data_dict["phoneExtra"]
            try:
                person.birthDate = SimpleDateFormat("yyyy-MM-dd").parse(birth_date) if birth_date else None
            except:
                person.birthDate = SimpleDateFormat("dd.MM.yyyy").parse(birth_date) if birth_date else None
            person.personal_data_agree = True
            person.fullname = u'%s %s %s' % (person.surname or '',
                                             person.name or '',
                                             person.patronymic or '')
            person.uid = getNextNoOfSeries(context, 'persons')
            person.insert()
            # создаем аккаунт
            createAccount(context, person.uid, password=_password, roles=['medstaff', 'address'])
            
        context.commit()
        # ВРЕМЕННО!!!!
        if not  out_data['response']:
            out_data['response'] = {'b': u'Имя пользователя (логин): %s, Пароль: %s' % (snils.replace("-", "").replace(" ", ""), _password)}
    
    return XMLJSONConverter.jsonToXml(json.dumps(out_data))


def changePassword(self, xmlIn):
    u'''Смена пароля пользователя.'''
    
    out_data = {'response': ''}
    
    input_data = json.loads(XMLJSONConverter.xmlToJson(xmlIn))
    if input_data['root']['@mode'] != 'remind':
        out_data['response'] = {'b': u'Неверный режим!'}
    else:
        # создаем ФЛ
        # данные
        snils = input_data['root']['snils']
        
        # генерируем пароль
        _password = id_generator()
        
        context = getContextByMaster()
        person = personCursor(context)
        logins = loginsCursor(context)
        # проверяем, есть ли такой пользователь по СНИЛС
        person.setRange('snils', normalizeSnils(snils))
        if person.tryFirst():
            # ФЛ найдено
            # проверяем, есть ли такой аккаунт
            logins.setFilter('userName', "'%s'" % (snils.replace("-", "").replace(" ", "")))
            if logins.tryFindSet():
                changePasswordFun(context, person.uid, _password)
            else:
                out_data['response'] = {'b': u'Аккаунт не найден. Для создания аккаунта нажмите на ссылку "Регистрация".'}
        else:
            out_data['response'] = {'b': u'Аккаунт не найден. Для создания аккаунта нажмите на ссылку "Регистрация".'}
            
        context.commit()
        # ВРЕМЕННО!!!!
        if not  out_data['response']:
            out_data['response'] = {'b': u'Имя пользователя (логин): %s, Пароль: %s' % (snils.replace("-", "").replace(" ", ""), _password)}
    
    return XMLJSONConverter.jsonToXml(json.dumps(out_data))