# coding:utf-8
import simplejson as json
from ru.curs.celesta.showcase.utils import XMLJSONConverter
from qt._qt_orm import QtiPackageCursor
from author._author_orm import serviceCatalogCursor
from common.grainssettings import SettingsManager
from suds.client import Client

def checkDublicates(context, main=None, add=None, filterinfo=None, session=None, data=None):

    dataDict = json.loads(data)
    catalog = QtiPackageCursor(context)
    warningMessage = "success"
    
    if "file" in dataDict["schema"]["context"]["files1"]:
        fileName = dataDict["schema"]["context"]["files1"]["file"]
        catalog.setRange("PackageName", fileName)
        if catalog.count() != 0:
            warningMessage = u"Файл с таким именем уже существует. Вы уверены, что хотите его заменить?"     
    else:
        warningMessage = "fileNotFound"
               
    return_data = {
        'schema': { 
            '@not_unique': warningMessage
        }
    }
#     raise Exception(warningMessage)               
#     if len(dataTheme) != len(set(x['order'] for x in dataTheme)):
#         return_data['schema']['@not_unique'] = u'�������� ��������� ������� �� ���������!'
        
    return XMLJSONConverter.jsonToXml(json.dumps(return_data))

def checkDublicatesOnService(context, main=None, add=None, filterinfo=None, session=None, data=None):
    
    warningMessage = "Success"
    
    dataDict = json.loads(data)
    package = QtiPackageCursor(context)
    currentRecordId = dataDict["schema"]["data"]["currentRecordId"]
    
    package.get(currentRecordId)
    packageId = package.PackageID
    
    request = {'packageId':packageId,
           'params':{}}

    u"""Параметры необходимые для вызова сервиса"""
    serviceCatalog = serviceCatalogCursor(context)
    serviceId = int(dataDict['schema']['data']['service_id'])
    
    serviceCatalog.get(serviceId)
    
    url = serviceCatalog.link
    settings_manager = SettingsManager()
    pin = settings_manager.getGrainSettings('parameter[@name="pin"]/@value', 'author')[0]
    address = settings_manager.getGrainSettings('parameter[@name="address"]/@value', 'author')[0]
    
    request['params']['pin'] = pin
    request['params']['address'] = address 
    
    u"""Вызов сервиса для проверки дубликатов данного БТЗ"""
    client = Client(url)
    try :
        answer = client.service.handle(request=json.dumps(request), procName="qt.webservices.webserviceCheckDbl.checkDublicates.celesta")
    except Exception as inst:
        raise Exception(inst)

    u"""Ответ полученный от сервиса"""
    answer = json.loads(answer)
    if answer["hasAccess"] == True:
        if answer["hasDublicates"] == True:
            warningMessage = u"БТЗ с таким именем уже существует. При сохранении файл будет заменен"     
    else:
        return context.error(u"Ошибка доступа! Проверьте настройки соединения с тестовой системой. Настройки заданные вами: address = " + str(address) + ", pin = " + str(pin))        
        
    return_data = {
        'schema': { 
            '@not_unique': warningMessage
        }
    }
#     raise Exception(warningMessage)               
#     if len(dataTheme) != len(set(x['order'] for x in dataTheme)):
#         return_data['schema']['@not_unique'] = u'�������� ��������� ������� �� ���������!'
        
    return XMLJSONConverter.jsonToXml(json.dumps(return_data))