<?php
require_once __DIR__ . '/../../../code/app.php';
!class_exists("Empleado") && require_once __DIR__ . '/../Models/empleadoModel.php';
!class_exists('LicenciaPortacionArma') && require_once __DIR__ . '/../Models/licenciaPortacionArmaModel.php';
!class_exists('DocumentoAdjuntoEmpleado') && require_once __DIR__ . '/../Models/documentoAdjuntoEmpleadoModel.php';

header("Content-Type: application/json; charset=utf-8");

$respuesta = (object)[];

$permisos = App::verificarAcceso();

$idUsuarioActual = App::obtenerIdUsuario();

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    $accion = isset($_GET['accion']) ? $_GET['accion'] : null;

    switch ($accion) {
        case 'obtenerParaDocumentosPago':
            $coddepartamento = intval($_GET['coddepartamento']);
            $codtipoplanilla = intval($_GET['codtipoplanilla']);
            $correlativo = intval($_GET['correlativo']);

            $respuesta = Empleado::obtenerParaDocumentosPago($coddepartamento, $codtipoplanilla, $correlativo);
            break;
        case 'obtenerPorTipoPlanilla':
            $codempresa = isset($_GET['codempresa']) ? intval($_GET['codempresa']) : 0;
            $codtipoplanilla = isset($_GET['codtipoplanilla']) ? intval($_GET['codtipoplanilla']) : 0;

            $respuesta = Empleado::obtenerPorTipoPlanilla($codempresa, $codtipoplanilla);
            break;
        case 'obtenerPorTipoPlanillaUbicacion':
            $codempresa = isset($_GET['codempresa']) ? intval($_GET['codempresa']) : 0;
            $codtipoplanilla = isset($_GET['codtipoplanilla']) ? intval($_GET['codtipoplanilla']) : 0;
            $codsucursal = isset($_GET['codsucursal']) ? intval($_GET['codsucursal']) : 0;
            $codproyecto = isset($_GET['codproyecto']) ? intval($_GET['codproyecto']) : 0;
            $estado = isset($_GET['estado']) ? intval($_GET['estado']) : 1;

            $respuesta = Empleado::obtenerPorTipoPlanillaUbicacion($codempresa, $codtipoplanilla, $codsucursal, $codproyecto, $estado);
            break;
        case 'obtenerCatalogosGestion':
            $db = obtenerConexion();

            !class_exists('EstadoCivil') && require_once __DIR__ . '/../../../code/models/estadoCivilModel.php';
            // !class_exists('Departamento') && require_once __DIR__ . '/../../../code/models/departamentoModel.php';
            !class_exists('Pais') && require_once __DIR__ . '/../../../code/models/paisModel.php';
            !class_exists('Profesion') && require_once __DIR__ . '/../../../code/models/profesionModel.php';
            !class_exists('DepartamentoEmpresa') && require_once __DIR__ . '/../models/departamentoEmpresaModel.php';
            !class_exists('Puesto') && require_once __DIR__ . '/../models/puestoModel.php';
            !class_exists('InstitucionPrevisional') && require_once __DIR__ . '/../../../code/models/institucionPrevisionalModel.php';
            !class_exists('InstitucionFinanciera') && require_once __DIR__ . '/../../../code/models/institucionFinancieraModel.php';
            !class_exists('TipoDocumento') && require_once __DIR__ . '/../../../code/models/tipoDocumentoModel.php';
            !class_exists('EstadoEmpleado') && require_once __DIR__ . '/../models/estadoEmpleadoModel.php';
            !class_exists('TipoDocumentoAdjunto') && require_once __DIR__ . '/../../../code/models/tipoDocumentoAdjuntoModel.php';
            !class_exists('UnidadTrabajo') && require_once __DIR__ . '/../models/unidadTrabajoModel.php';

            $solicitudEstadoCiviles = EstadoCivil::obtenerTodos($db);
            // $solicitudDepartamentos = Departamento::obtenerTodos($db);
            $solicitudPaises = Pais::obtenerTodos($db);
            $solicitudProfesiones = Profesion::obtenerTodos($db);
            $solicitudDepartamentosEmpresa = DepartamentoEmpresa::obtenerTodos($db);
            $solicitudPuestos = Puesto::obtenerTodos($db);
            $solicitudInstitucionesPrevisionales = InstitucionPrevisional::obtenerTodos($db);
            $solicitudInstitucionesFinancieras = InstitucionFinanciera::obtenerTodos($db);
            $solicitudTiposDocumentos = TipoDocumento::obtenerTodosNET($db);
            $solicitudEstados = EstadoEmpleado::obtenerTodos($db);
            $solicitudTiposDocumentosAdjuntos = TipoDocumentoAdjunto::obtenerTodos($db);
            $solicitudUnidadesTrabajo = UnidadTrabajo::obtenerTodos($db);

            $estadosCiviles = $solicitudEstadoCiviles->status == 200 ? $solicitudEstadoCiviles->data : [];
            // $departamentos = $solicitudDepartamentos->status == 200 ? $solicitudDepartamentos->data : [];
            $paises = $solicitudPaises->status == 200 ? $solicitudPaises->data : [];
            $profesiones = $solicitudProfesiones->status == 200 ? $solicitudProfesiones->data : [];
            $departamentosEmpresa = $solicitudDepartamentosEmpresa->status == 200 ? $solicitudDepartamentosEmpresa->data : [];
            $puestos = $solicitudPuestos->status == 200 ? $solicitudPuestos->data : [];
            $institucionesPrevisionales = $solicitudInstitucionesPrevisionales->status == 200 ? $solicitudInstitucionesPrevisionales->data : [];
            $institucionesFinancieras = $solicitudInstitucionesFinancieras->status == 200 ? $solicitudInstitucionesFinancieras->data : [];
            $tiposDocumentos = $solicitudTiposDocumentos->status == 200 ? $solicitudTiposDocumentos->data : [];
            $estados = $solicitudEstados->status == 200 ? $solicitudEstados->data : [];
            $tiposDocumentosAdjuntos = $solicitudTiposDocumentosAdjuntos->status == 200 ? $solicitudTiposDocumentosAdjuntos->data : [];
            $unidadesTrabajo = $solicitudUnidadesTrabajo->status == 200 ? $solicitudUnidadesTrabajo->data : [];

            $respuesta->status = 200;
            $respuesta->data = (object)[
                'estadosCiviles' => $estadosCiviles,
                'paises' => $paises,
                'profesiones' => $profesiones,
                'departamentosEmpresa' => $departamentosEmpresa,
                'puestos' => $puestos,
                'institucionesPrevisionales' => $institucionesPrevisionales,
                'institucionesFinancieras' => $institucionesFinancieras,
                'tiposDocumentos' => $tiposDocumentos,
                'estados' => $estados,
                'tiposDocumentosAdjuntos' => $tiposDocumentosAdjuntos,
                'unidadesTrabajo' => $unidadesTrabajo
            ];
            break;
        case 'obtenerComplementoGestion':
            $codempleado = isset($_GET['codempleado']) ? $_GET['codempleado'] : '0';

            $db = obtenerConexion();

            $solicitudLicenciaArmas = LicenciaPortacionArma::obtenerPorEmpleado($codempleado, $db);
            $solicitudAdjuntos = DocumentoAdjuntoEmpleado::obtenerPorEmpleado($codempleado, $db);

            $licenciaPortacionArmas = $solicitudLicenciaArmas->status == 200 ? $solicitudLicenciaArmas->data : (object)[];
            $adjuntos = $solicitudAdjuntos->status == 200 ? $solicitudAdjuntos->data : [];

            $respuesta->status = 200;
            $respuesta->data = (object)[
                'licenciaPortacionArmas' => $licenciaPortacionArmas,
                'adjuntos' => $adjuntos
            ];
            break;
        default:
            $respuesta->status = 400;
            $respuesta->message = "Acción no válida";
            break;
    }
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $input = json_decode(file_get_contents('php://input'), true);
    !empty($_POST) && $input = $_POST;
    $accion = isset($input['accion']) ? $input['accion'] : null;

    switch ($accion) {
        case 'actualizarEmail':
            $id = isset($input['id']) ? intval($input['id']) : null;
            $codempleado = isset($input['codempleado']) ? $input['codempleado'] : '0';
            $email = isset($input['email']) ? $input['email'] : null;

            $empleado = new Empleado();

            $empleado->id = $id;
            $empleado->codempleado = $codempleado;
            $empleado->email = $email;

            $respuesta = $empleado->actualizarEmail();
            break;
        case 'actualizarDescripcionRecibo':
            $id = isset($input['id']) ? intval($input['id']) : null;
            $codempleado = isset($input['codempleado']) ? $input['codempleado'] : '0';
            $descripcionRecibo = isset($input['descripcionRecibo']) ? $input['descripcionRecibo'] : null;

            $empleado = new Empleado();

            $empleado->id = $id;
            $empleado->codempleado = $codempleado;
            $empleado->descripcionRecibo = $descripcionRecibo;

            $respuesta = $empleado->actualizarDescripcionRecibo();
            break;
        case 'construirDocumentoPago':
            $esAguinaldo = $input['aguinaldo'] == 1;
            $codempleado = isset($input['codempleado']) ? $input['codempleado'] : '0';
            $codempresa = isset($input['codempresa']) ? $input['codempresa'] : '0';
            $correlativo = isset($input['correlativo']) ? intval($input['correlativo']) : 0;
            $codtipoplanilla = isset($input['codtipoplanilla']) ? intval($input['codtipoplanilla']) : 0;
            $id = isset($input['id']) ? intval($input['id']) : null;
            $tipoAccion = isset($input['tipoAccion']) ? $input['tipoAccion'] : "Descargar";

            !class_exists('DocumentoPago') && require_once __DIR__ . '/../models/documentoPagoModel.php';
            $documentoPago = new DocumentoPago();
            $documentoPago->idProceso = 0;
            $documentoPago->idUsuario = $idUsuarioActual;
            $documentoPago->codempleado = $codempleado;
            $documentoPago->codempresa = $codempresa;
            $documentoPago->correlativoPlanilla = $correlativo;
            $documentoPago->tipoPlanilla = $codtipoplanilla;
            $documentoPago->esAguinaldo = $esAguinaldo;
            $documentoPago->tipoAccion = $tipoAccion;

            $respuesta = $documentoPago->construir();
            break;
        case "guardar":
            $poseeArma = isset($input['poseeArma']) ? intval($input['poseeArma']) : 0;
            $datosLicencia = isset($input['datosLicenciaArma']) && !empty($input['datosLicenciaArma']) ? json_decode($input['datosLicenciaArma'], true) : null;
            $adjuntos = isset($input['adjuntos']) && !empty($input['adjuntos']) ? json_decode($input['adjuntos'], true) : null;

            $empleado = new Empleado();
            $empleado->codempleado = $input['codempleado'];
            $empleado->idTipoDocumento = $input['idTipoDocumento'];
            $empleado->numeroDocumento = $input['numeroDocumento'];
            $empleado->nit = $input['nit'];
            $empleado->primerNombre = $input['primerNombre'];
            $empleado->segundoNombre = $input['segundoNombre'];
            $empleado->primerApellido = $input['primerApellido'];
            $empleado->segundoApellido = $input['segundoApellido'];
            $empleado->codsucursal = $input['codsucursal'];
            $empleado->codproyecto = $input['codproyecto'];
            $empleado->codtipoplanilla = $input['codtipoplanilla'];
            $empleado->idUnidadTrabajo = $input['idUnidadTrabajo'];
            $empleado->genero = $input['genero'] == "M" ? 1 : 0;
            $empleado->idEstadoCivil = $input['idEstadoCivil'];
            $empleado->apellidoCasada = $input['apellidoCasada'];
            $empleado->conocidoPor = $input['conocidoPor'];
            $empleado->fechaNacimiento = $input['fechaNacimiento'];
            $empleado->idPais = $input['idPais'];
            $empleado->idDepartamento = $input['idDepartamento'];
            $empleado->idMunicipio = $input['idMunicipio'];
            $empleado->direccion = $input['direccion'];
            $empleado->telefonoFijo = $input['telefonoFijo'];
            $empleado->telefonoMovil = $input['telefonoMovil'];
            $empleado->codprofesion = $input['codprofesion'];
            $empleado->fechaEmisionDUI = $input['fechaEmisionDUI'];
            $empleado->fechaVencimientoDUI = $input['fechaVencimientoDUI'];
            $empleado->coddepartamento = $input['coddepartamento'];
            $empleado->codpuesto = $input['codpuesto'];
            $empleado->codjefe = $input['codjefe'];
            $empleado->fechaIngreso = $input['fechaIngreso'];
            $empleado->cotizaisss = $input['cotizaisss'];
            $empleado->fechaInicioCotizacion = $input['fechaInicioCotizacion'];
            $empleado->isssempleado = $input['isssempleado'];
            $empleado->codafp = $input['codafp'];
            $empleado->nupempleado = $input['nupempleado'];
            $empleado->salario = $input['salario'];
            $empleado->pagoPorTransaccion = $input['pagoPorTransaccion'];
            $empleado->codbanco = $input['codbanco'];
            $empleado->numeroCuenta = $input['numeroCuenta'];
            $empleado->numeroTarjeta = $input['numeroTarjeta'];
            $empleado->nombreArchivoFoto = $input['nombreArchivoFoto'];

            try {
                $db = obtenerConexion();

                $db->beginTransaction();
                $respuesta = $empleado->guardar();

                if ($respuesta->status == 200) {
                    if (isset($_FILES['archivoFoto'])) {
                        $directorio = __DIR__ . '/../../assets/images/empleados/';
                        if (!is_dir($directorio)) {
                            mkdir($directorio, 0777, true);
                        }

                        $archivoFoto = $_FILES['archivoFoto'];

                        if (file_exists($directorio . $empleado->nombreArchivoFoto)) {
                            unlink($directorio . $empleado->nombreArchivoFoto);
                        }

                        move_uploaded_file($archivoFoto['tmp_name'], $directorio . $empleado->nombreArchivoFoto);
                    }

                    !class_exists('LicenciaPortacionArma') && require_once __DIR__ . '/../models/licenciaPortacionArmaModel.php';
                    if ($poseeArma === 1) {

                        $licencia = new LicenciaPortacionArma();
                        $licencia->codempleado = $empleado->codempleado;
                        $licencia->numeroLicencia = $datosLicencia['numeroLicencia'];
                        $licencia->fechaEmision = $datosLicencia['fechaEmision'];
                        $licencia->fechaExpira = $datosLicencia['fechaExpiracion'];
                        $licencia->enEmergenciaLlamar = $datosLicencia['enEmergenciaLlamar'];
                        $licencia->numeroRegistro = $datosLicencia['numeroRegistro'];
                        $licencia->tipoSangre = $datosLicencia['tipoSangre'];
                        $licencia->telefono = $datosLicencia['telefono'];

                        $respuestaLicencia = $licencia->guardar($db);

                        if ($respuesta->status !== 200) {
                            $db->rollBack();
                            $respuesta->status = 500;
                            $respuesta->message = $respuestaLicencia->message;
                            break;
                        }
                    } else {
                        LicenciaPortacionArma::limpiarPorEmpleado($empleado->codempleado, $db);
                    }

                    !class_exists('DocumentoAdjuntoEmpleado') && require_once __DIR__ . '/../models/documentoAdjuntoEmpleadoModel.php';
                    $idsAdjuntos = [];

                    $directorio = __DIR__ . '/../../docs/empleados/';
                    if (!is_dir($directorio)) {
                        mkdir($directorio, 0777, true);
                    }

                    foreach ($adjuntos as $key => $adjunto) {
                        $documento = new DocumentoAdjuntoEmpleado();
                        $documento->id = $adjunto['id'];
                        $documento->codempleado = $empleado->codempleado;
                        $documento->idTipoDocumento = $adjunto['idTipoDocumento'];
                        $documento->nombreDocumento = isset($adjunto['nombreDocumento']) ? $adjunto['nombreDocumento'] : $adjunto['nombreArchivo'];
                        $documento->tipoArchivo = $adjunto['tipoArchivo'];

                        $respuestaDocumento = $documento->guardar($db);

                        if ($respuestaDocumento->status !== 200) {
                            $db->rollBack();
                            $respuesta->status = 500;
                            $respuesta->message = $respuestaDocumento->message;
                            echo json_encode($respuesta);
                            exit();
                        }

                        $idsAdjuntos[] = $respuestaDocumento->data->id;

                        if (isset($_FILES['archivo' . $adjunto['cnt']])) {
                            $archivo = $_FILES['archivo' . $adjunto['cnt']];

                            if (file_exists($directorio . $documento->nombreArchivo)) {
                                unlink($directorio . $documento->nombreArchivo);
                            }

                            move_uploaded_file($archivo['tmp_name'], $directorio . $documento->nombreArchivo);
                        }
                    }

                    DocumentoAdjuntoEmpleado::limpiarPorEmpleado($empleado->codempleado, $idsAdjuntos, $db);
                    $db->commit();
                } else {
                    $db->rollBack();
                }
            } catch (PDOException $e) {
                $db->rollBack();
                $respuesta->status = 500;
                $respuesta->message = $e->getMessage();
            } catch (Exception $e) {
                $db->rollBack();
                $respuesta->status = 500;
                $respuesta->message = $e->getMessage();
            }
            // $respuesta->status = 500;
            // $respuesta->message = "Error al guardar";
            // $respuesta->prueba = $input;

            // if (!empty($_FILES)) {
            //     if(isset($_FILES['archivoFoto'])){
            //         $respuesta->otro = 'Hay actualización de foto de empleado';
            //     }
            //     $respuesta->algo = "hay archivos";
            // }
            break;
        default:
            $respuesta->status = 400;
            $respuesta->message = 'Acción no válida';
            break;
    }
}

$httpCode = isset($respuesta->status) ? $respuesta->status : 500;
http_response_code($httpCode);
echo json_encode($respuesta);
