# -*- coding: utf-8 -*-

from ImportarSurvey.Utiles import ToolboxLogger
from ImportarSurvey.ImportarDatos import ImportarDatos

class ImportarDatosInyeccion(ImportarDatos) :

    def __init__(self, 
        fuente_da, 
        destino_da, 
        claseFuentePrincipal = '', 
        claseDestinoPrincipal = '', 
        usuarioCampo = '') :

        super().__init__(
            fuente_da,
            destino_da,
            claseFuentePrincipal = claseFuentePrincipal,
            claseDestinoPrincipal = claseDestinoPrincipal,
            usuarioCampo = usuarioCampo)

    def agregarInforme(self) :
        ToolboxLogger.info("Total Aceptadas      : {}".format(self.estadisticas.totalEstadoEncuesta("estado_aceptacion", "aceptada")))
        ToolboxLogger.info("Total No Aceptadas   : {}".format(self.estadisticas.totalEstadoEncuesta("estado_aceptacion", "no_aceptada")))
        ToolboxLogger.info("Total Sincronizadas  : {}".format(self.estadisticas.totalEstadoEncuesta("estado_sincronizacion", "sincronizada")))

    @ToolboxLogger.log_method
    def actualizarRegistroOrigen(self, nombre_tabla, registro, llave, valor = None) :
        try :
            if nombre_tabla == self.claseFuentePrincipal and not valor :
                registro["estado_sincronizacion"] = "sincronizada"
                registro["estadoenc"] = None

                if self.estadisticas.obtenerEstadisticasActual("E") < 1 :
                    registro["estado_aceptacion"] = "aceptada"
                else :
                    registro["estado_aceptacion"] = "no_aceptada"

                resultado = self.fuente_da.update(nombre_tabla, registro)
                self.estadisticas.actualizarEncuesta(registro[llave], 
                    {"estado_sincronizacion": registro["estado_sincronizacion"],
                     "estado_aceptacion": registro["estado_aceptacion"],
                     "estadoenc": registro["estadoenc"]})
                ToolboxLogger.debug("Resultado Cambio de Estado: {}".format(resultado))
            else :
                if valor and llave in registro and valor != registro[llave]:
                    valor_anterior = registro[llave]
                    tabla = self.fuente_da.getTable(nombre_tabla)

                    registro_a_actualizar = {}
                    registro_a_actualizar[tabla.properties.globalIdField] = registro[tabla.properties.globalIdField]
                    registro_a_actualizar[tabla.properties.objectIdField] = registro[tabla.properties.objectIdField]
                    registro_a_actualizar[llave] = valor

                    resultado = self.fuente_da.update(tabla, registro_a_actualizar)
                    if resultado != {} :
                        guid = resultado["globalId"] if "globalId" in resultado else '{}'
                        ToolboxLogger.debug("Cambio de llave en '{}' para 'globalId' = '{}'':".format(nombre_tabla, guid))
                        ToolboxLogger.debug("'{}' de '{}' a '{}'".format(llave, valor_anterior, valor))
                    else :
                        ToolboxLogger.debug("No cambio de llave en '{}':".format(tabla))
                        ToolboxLogger.debug("Para '{}' = '{}'".format(llave, valor))
        except Exception as ex:
            ToolboxLogger.info("Error: {}".format(ex))



