<?php

class Personas {
    
    public static function datosPorIdentificacion($identificacion){
        $sqlQuery  = PersonasSQL::DATOS_COMPLETOS . " WHERE ( Personas.personaIDENTIFICACION = ? )";
        return SicamDB::selectUnaFila($sqlQuery, array($identificacion));
    }
    
    
    public static function buscarPersona($identificacion){
        $sqlQuery  = PersonasSQL::DATOS_TABLA_PERSONAS . " WHERE ( Personas.personaIDENTIFICACION = ? )";
        return SicamDB::selectUnaFila($sqlQuery, array($identificacion));
    }
    
    public static function porIdentificacion($identificacion, $tipoIdentificacion){
        $sqlQuery  = PersonasSQL::DATOS_COMPLETOS . " WHERE ( Personas.personaIDENTIFICACION = ? )
                                                    AND ( Personas.tipoIdentificacionID = ? )";
        return SicamDB::selectUnaFila($sqlQuery, array($identificacion, $tipoIdentificacion));
    }
    
    public static function buscarPersonaPorId($identificador){
         $sqlQuery  = PersonasSQL::DATOS_COMPLETOS . " WHERE ( Personas.personaID = ? )";
        return SicamDB::selectUnaFila($sqlQuery, array($identificador));
    }
    
    public static function datosCompletos($personaID){
         $sqlQuery  = PersonasSQL::DATOS_COMPLETOS . " WHERE ( Personas.personaID = ? )";
        return SicamDB::selectUnaFila($sqlQuery, array($personaID));
    }
    
    public static function actualizarInformacionGeneral($datos){
        $sqlQuery = 'UPDATE 
                        Personas
                    SET 
                        tipoIdentificacionID = ?,personaIDENTIFICACION = ?,personaNOMBRES = ?,personaAPELLIDOS = ?, personaFCHNACIMIENTO = ?
                    WHERE ( Personas.personaID = ? )';
        return SicamDB::actualizarFila($sqlQuery, $datos);
    }
    
    public static function actualizarInformacionAvanzada($datos){
        $sqlQuery = 'UPDATE 
                        Personas
                    SET 
                        personaFCHNACIMIENTO = ?, personaLUGARNACIMIENTO = ?, personaLUGAREXPEDICIONCC = ?, personaTIPOSANGRE= ?, personaESTADOCIVIL = ?
                    WHERE ( Personas.personaID = ? )';
        return SicamDB::actualizarFila($sqlQuery, $datos);
    }
    
    public static function actualizarInformacionContacto($celular,$direccion,$correo,$fijo,$personaID,$usuarioID){
        self::guardarNumeroTelefonico($personaID,'CELULAR',$usuarioID,$celular);
        self::guardarNumeroTelefonico($personaID,'FIJO',$usuarioID,$fijo);
        self::guardarCorreoElectronico($personaID,$usuarioID,$correo);
        self::guardarDireccionDomicilio($personaID,$usuarioID,$direccion);
    }
    
    public static function guardarNumeroTelefonico($personaID,$tipo,$usuarioID,$numero){
        if(!is_null($telefono = PersonasTelefonos::datos($personaID,$tipo,'ACTIVO'))){
            if($telefono->telefonoNUMERO != $numero){
                PersonasTelefonos::desactivar($personaID,$tipo,$telefono->telefonoNUMERO);
                $telefono = PersonasTelefonos::datosPorNumero($personaID,$tipo,'DESACTIVO',$numero);
                if(!is_null($telefono)){
                    PersonasTelefonos::activar($personaID,$tipo,$numero);
                }else{
                    PersonasTelefonos::guardar($numero,$tipo,$personaID,$usuarioID);
                }
            }
        }else{
            PersonasTelefonos::guardar($numero,$tipo,$personaID,$usuarioID);
        }
    }
    
    public static function guardarCorreoElectronico($personaID,$usuarioID,$correo){
        if(!is_null($correoPrincipal = PersonasCorreos::datos($personaID,'ACTIVO'))){
            if($correoPrincipal->correoDIRECCION != $correo){
                PersonasCorreos::desactivar($personaID,$correoPrincipal->correoDIRECCION);
                
                $correoPrincipal = PersonasCorreos::datosPorCorreo($personaID,'DESACTIVO',$correo);
                if(!is_null($correoPrincipal)){
                    PersonasCorreos::activar($personaID,$correo);
                }else{
                    PersonasCorreos::guardar($correo,$personaID,$usuarioID);
                }
            }
        }else{
            PersonasCorreos::guardar($correo,$personaID,$usuarioID);
        }
    }
    
    public static function guardarDireccionDomicilio($personaID,$usuarioID,$direccion){
        if(!is_null($direccionPrincipal = PersonasDirecciones::datos($personaID,'ACTIVO'))){
            if($direccionPrincipal->direccionNOMENCLATURA != $direccion){
                PersonasDirecciones::desactivar($personaID,$direccionPrincipal->direccionNOMENCLATURA);
                $direccionPrincipal = PersonasDirecciones::datosPorDireccion($personaID,'DESACTIVO',$direccion);
                if(!is_null($direccionPrincipal)){
                    PersonasDirecciones::activar($personaID,$direccion);
                }else{
                    PersonasDirecciones::guardar($direccion,$personaID,$usuarioID);
                }
            }
        }else{
            PersonasDirecciones::guardar($direccion,$personaID,$usuarioID);
        }
    }
    
    public static function actualizarInformacionCliente($celular,$direccion,$correo,$fijo, $ciudad, $idpersona){
        $sqlQuery  = "UPDATE " . PersonasSQL::JOIN_DATOS_COMPLETOS . " 
        SET PersonasTelfCelular.telefonoNUMERO = ?, PersonasDirDomicilio.direccionNOMENCLATURA= ?,
        PersonasCorreos.correoDIRECCION = ?, PersonasTelfFijo.telefonoNUMERO = ? , PersonasDirComercial.direccionCIUDAD = ? 
        WHERE ( Personas.personaID = ? )";
        return SicamDB::actualizarFila($sqlQuery, array($celular,$direccion,$correo,$fijo, $ciudad, $idpersona));
    }
    
    public static function actualizarTallasDePersonas($tallaID,$personaID,$categoria){
        $sqlQuery = '
            UPDATE PersonasTallas
            INNER JOIN Tallas  ON PersonasTallas.tallaID = Tallas.tallaID
            SET PersonasTallas.tallaID = ?
            WHERE ( PersonasTallas.personaID = ? ) AND ( Tallas.tallaCATEGORIA = ? );';
            return SicamDB::actualizarFila($sqlQuery, array($tallaID,$personaID,$categoria));
    }
    
    public static function idPorIdentificacion($identificacion){
        $sqlQuery  = PersonasSQL::DATOS_TABLA_PERSONAS . " WHERE ( Personas.personaIDENTIFICACION = ? )";
        return SicamDB::selectUnaFila($sqlQuery, array($identificacion))->personaID;
    }
    
    public static function buscarTallasDePersona($idPersona,$categoria){
        $sqlQuery  = "
            SELECT
                *
            FROM 
                PersonasTallas
            INNER JOIN
                Tallas  ON PersonasTallas.tallaID = Tallas.tallaID
            WHERE ( PersonasTallas.personaID = ? ) AND ( Tallas.tallaCATEGORIA = ? )";
        $talla = SicamDB::selectUnaFila($sqlQuery, array($idPersona,$categoria));
        if(is_null($talla)){
            return null;
        }else{
            return $talla->tallaID;
        }
    }
    
    public static function getPersonaTelefonos($idpersona,$tipo){
        $sqlQuery = 'SELECT PersonasTelefonos.* FROM PersonasTelefonos
        WHERE ( PersonasTelefonos.personasID = ? ) AND( PersonasTelefonos.telefonoTIPO = ?)';
        return SicamDB::selectUnaFila($sqlQuery, array($idpersona,$tipo));
    }
    
    public static function actualizarBasico($tipoPersonaID, $tipoIdentificacionID, $personaIDENTIFICACION, $personaRAZONSOCIAL,$personaNombres, $personaApellidos, $personaFechaNacimiento, $colaboradorID) {
        $sqlQuery = 'UPDATE `Personas` SET `tipoPersonaID`= ?, `tipoIdentificacionID` = ?, `personaIDENTIFICACION` = ?, `personaRAZONSOCIAL` = ?,`personaNOMBRES` = ?, `personaAPELLIDOS` = ?, `personaFCHNACIMIENTO` = ?, `personaUSRCREA` = ?);';
        return SicamDB::actualizarFila($sqlQuery,
                array($tipoPersonaID, $tipoIdentificacionID, $personaIDENTIFICACION,
            $personaRAZONSOCIAL,$personaNombres, $personaApellidos, $personaFechaNacimiento, $colaboradorID));
    }
    
    public static function informacionAvanzada($personaId){
        $personas = self::buscarPersonaPorId($personaId);
        $personas->zapato = self::buscarTallasDePersona($personaId,'ZAPATOS');
        $personas->camisa = self::buscarTallasDePersona($personaId,'CAMISA');
        $personas->pantalon = self::buscarTallasDePersona($personaId,'PANTALON');
        return $personas;
    }
    
    
    /*
    **
    ***/
    
    public static function datos($personaID) {
        $sqlQuery = PersonasSQL::DATOS_BASICOS . " WHERE Personas.personaID =  ? ; ";
        $persona =  SicamDB::selectUnaFila($sqlQuery, array($personaID));
        $celular = self::datosTelefonicos($personaID, 'CELULAR');
        if(count($celular)>0):
            $persona->telefonoCELULAR = $celular;
        endif;
        $fijo = self::datosTelefonicos($personaID, 'FIJO');
        if(count($fijo)>0):
            $persona->telefonoFIJO = $fijo;
        endif;
        $correo = self::datosCorreo($personaID, 'PRINCIPAL');
        if(count($correo)>0):
            $persona->correoPRINCIPAL = $correo;
        endif;
        $direccion = self::datosDireccion($personaID, 'DOMICILIO');
        if(count($direccion)>0):
            $persona->direccionDOMILICILIO = $direccion;
        endif;
        return $persona;
    }
    
    public static function guardar($tipoPersonaID, $tipoIdentificacionID, $personaIDENTIFICACION, $personaRAZONSOCIAL,$personaNombres, $personaApellidos, $personaFechaNacimiento, $personaSEXO) {
        $sqlQuery = PersonasSQL::CREAR_REGISTRO; 
        return SicamDB::insertFila($sqlQuery,
                array($tipoPersonaID, $tipoIdentificacionID, $personaIDENTIFICACION,
            $personaRAZONSOCIAL,$personaNombres, $personaApellidos, $personaFechaNacimiento, $personaSEXO, Cliente::usuarioID()));
    }
    
    public static function datosTelefonicos($personaID, $tipoTelefono) {
        $sqlQuery = PersonasSQL::DATOS_TELEFONICOS . " WHERE personasID =  ? AND telefonoTIPO = ? AND telefonoESTADO='ACTIVO'";
        return SicamDB::selectUnaFila($sqlQuery, array($personaID, $tipoTelefono));
    }
    
    public static function datosDireccion($personaID, $tipoDireccion) {
        $sqlQuery = PersonasSQL::DATOS_DIRECCION . " WHERE personasID =  ? AND direccionTIPO = ? AND direccionESTADO='ACTIVO'";
        return SicamDB::selectUnaFila($sqlQuery, array($personaID, $tipoDireccion));
    }
    
    public static function datosCorreo($personaID, $tipoCorreo) {
        $sqlQuery = PersonasSQL::DATOS_CORREO . " WHERE personaID =  ? AND correoTIPO = ? AND correoESTADO='ACTIVO'";
        return SicamDB::selectUnaFila($sqlQuery, array($personaID, $tipoCorreo));
    }
    
    public static function actualizarTipoIdentificacion($tipoIdentificacionID, $personaID) {
        $sqlQuery = "UPDATE Personas SET tipoIdentificacionID = ? WHERE personaID = ? ;";
        return SicamDB::actualizarFila($sqlQuery,
                        array($tipoIdentificacionID, $personaID));
    }
    
    public static function actualizarIdentificacion($personaIDENTIFICACION, $personaID) {
        $sqlQuery = "UPDATE Personas SET personaIDENTIFICACION = ? WHERE personaID = ? ;";
        return SicamDB::actualizarFila($sqlQuery,
                        array($personaIDENTIFICACION, $personaID));
    }
    
    public static function actualizarRazonSocial($personaRAZONSOCIAL, $personaID) {
        $sqlQuery = "UPDATE Personas SET personaRAZONSOCIAL = ? WHERE personaID = ? ;";
        return SicamDB::actualizarFila($sqlQuery,
                        array($personaRAZONSOCIAL, $personaID));
    }

    public static function actualizarNombres($personaNOMBRES, $personaID) {
        $sqlQuery = "UPDATE Personas SET personaNOMBRES = ? WHERE personaID = ? ;";
        return SicamDB::actualizarFila($sqlQuery,
                        array($personaNOMBRES, $personaID));
    }
    
    public static function actualizarFechaNacimiento($personaFCHNACIMIENTO, $personaID) {
        $sqlQuery = "UPDATE Personas SET personaFCHNACIMIENTO = ? WHERE personaID = ? ;";
        return SicamDB::actualizarFila($sqlQuery,
                        array($personaFCHNACIMIENTO, $personaID));
    }
    public static function actualizarApellidos($personaAPELLIDOS, $personaID) {
        $sqlQuery = "UPDATE Personas SET personaAPELLIDOS = ? WHERE personaID = ? ;";
        return SicamDB::actualizarFila($sqlQuery,
                        array($personaAPELLIDOS, $personaID));
    }

    public static function actualizarSexo($personaSEXO, $personaID) {
        $sqlQuery = "UPDATE Personas SET personaSEXO = ? WHERE personaID = ? ;";
        return SicamDB::actualizarFila($sqlQuery,
                        array($personaSEXO, $personaID));
    }
}
