<?php
session_start();
header('Content-Type: application/json');

require_once(__DIR__ . '/../db/conexion.php');

$response = ['success' => false, 'message' => ''];

if (!isset($_SESSION['attuid'])) {
    echo json_encode($response);
    exit;
}

$input = json_decode(file_get_contents('php://input'), true);
$descripcion = isset($input['descripcion']) ? $conn->real_escape_string(trim($input['descripcion'])) : '';
$monto = isset($input['monto']) ? floatval($input['monto']) : 0;
$parcialidades = isset($input['parcialidades']) ? intval($input['parcialidades']) : 1;
$interes_fijo = isset($input['interes_fijo']) ? floatval($input['interes_fijo']) : 0.00;
$periodicidad = isset($input['periodicidad']) ? $conn->real_escape_string(trim($input['periodicidad'])) : null;
$id_quincena = isset($input['id_quincena']) ? intval($input['id_quincena']) : null;

// Obtener la fecha_fin de la quincena seleccionada para guardar en fecha_inicio_pago
$fecha_inicio_pago = null;
if ($id_quincena) {
    $sql_quincena = "SELECT fecha_fin FROM Quincenas WHERE id_quincena = $id_quincena LIMIT 1";
    $res_quincena = $conn->query($sql_quincena);
    if ($res_quincena && $res_quincena->num_rows > 0) {
        $row_quincena = $res_quincena->fetch_assoc();
        $fecha_inicio_pago = $conn->real_escape_string($row_quincena['fecha_fin']);
    }
}

// Calcular fecha_fin de la deducción
$fecha_fin = null;
if ($id_quincena && $parcialidades > 0) {
    if ($periodicidad === 'Mensual' && $fecha_inicio_pago) {
        // Sumar (parcialidades - 1) meses a la fecha de inicio, manteniendo el mismo día si existe, si no, usar el último día del mes
        $fecha_inicio = new DateTime($fecha_inicio_pago);
        $dia_inicio = (int)$fecha_inicio->format('d');
        $anio = (int)$fecha_inicio->format('Y');
        $mes = (int)$fecha_inicio->format('m');
        $mes += ($parcialidades - 1);
        while ($mes > 12) {
            $mes -= 12;
            $anio++;
        }
        // Calcular último día del mes destino
        $ultimo_dia_mes = (int)date('t', strtotime($anio.'-'.$mes.'-01'));
        $dia_final = ($dia_inicio > $ultimo_dia_mes) ? $ultimo_dia_mes : $dia_inicio;
        $fecha_fin_dt = DateTime::createFromFormat('Y-m-d', sprintf('%04d-%02d-%02d', $anio, $mes, $dia_final));
        $fecha_fin = $conn->real_escape_string($fecha_fin_dt->format('Y-m-d'));
    } else {
        // Lógica original para quincenal
        $sql_quincenas = "SELECT fecha_fin FROM Quincenas WHERE fecha_fin >= '$fecha_inicio_pago' ORDER BY fecha_fin ASC";
        $res_quincenas = $conn->query($sql_quincenas);
        $todas_quincenas = [];
        if ($res_quincenas && $res_quincenas->num_rows > 0) {
            while ($row = $res_quincenas->fetch_assoc()) {
                $todas_quincenas[] = $row['fecha_fin'];
            }
        }
        // Si no hay suficientes, obtener todas las quincenas del año base para repetir ciclo
        $sql_quincenas_base = "SELECT fecha_fin FROM Quincenas ORDER BY fecha_fin ASC";
        $res_base = $conn->query($sql_quincenas_base);
        $quincenas_base = [];
        if ($res_base && $res_base->num_rows > 0) {
            while ($row = $res_base->fetch_assoc()) {
                $quincenas_base[] = $row['fecha_fin'];
            }
        }
        $total = count($todas_quincenas);
        $faltan = $parcialidades - $total;
        $fecha_fin = null;
        $quincenas_finales = $todas_quincenas;
        $anio_extra = 0;
        while ($faltan > 0 && count($quincenas_base) > 0) {
            foreach ($quincenas_base as $qf) {
                // Sumar +1 año por cada ciclo completo
                $fecha = new DateTime($qf);
                $fecha->modify('+' . (1 + $anio_extra) . ' year');
                $quincenas_finales[] = $fecha->format('Y-m-d');
                $faltan--;
                if ($faltan == 0) break;
            }
            $anio_extra++;
        }
        if (count($quincenas_finales) >= $parcialidades) {
            $fecha_fin = $conn->real_escape_string($quincenas_finales[$parcialidades-1]);
        } else if (count($quincenas_finales) > 0) {
            $fecha_fin = $conn->real_escape_string(end($quincenas_finales));
        }
        if (!$fecha_fin) {
            $response['message'] = 'No hay suficientes quincenas para calcular la fecha fin.';
            echo json_encode($response);
            exit;
        }
    }
}

$solicitante = isset($input['solicitante']) ? $conn->real_escape_string(trim($input['solicitante'])) : null;
$monto_por_parcialidad = isset($input['monto_por_parcialidad']) ? floatval($input['monto_por_parcialidad']) : 0.00;
$creado_por = $conn->real_escape_string($_SESSION['attuid']);

if ($descripcion === '' || $monto <= 0) {
    $response['message'] = 'Descripción y monto requeridos';
    echo json_encode($response);
    exit;
}

$fecha_sql = $fecha_inicio_pago ? "'{$fecha_inicio_pago}'" : 'NULL';
$fecha_fin_sql = $fecha_fin ? "'{$fecha_fin}'" : 'NULL';
$solicitante_sql = $solicitante ? "'{$solicitante}'" : 'NULL';
$periodicidad_sql = $periodicidad ? "'{$periodicidad}'" : 'NULL';
$id_quincena_sql = $id_quincena ? $id_quincena : 'NULL';
// Insertar también parcialidadesPendientes
$sql = "INSERT INTO deducciones (descripcion, monto, parcialidades, parcialidadesPendientes, interes_fijo, fecha_inicio_pago, fecha_fin, periodicidad, id_quincena, solicitante, monto_por_parcialidad, activo, creado_por, creado_en) VALUES ('{$descripcion}', {$monto}, {$parcialidades}, {$parcialidades}, {$interes_fijo}, {$fecha_sql}, {$fecha_fin_sql}, {$periodicidad_sql}, {$id_quincena_sql}, {$solicitante_sql}, {$monto_por_parcialidad}, 1, '{$creado_por}', NOW())";
if ($conn->query($sql)) {
    $response['success'] = true;
    $response['message'] = 'Deducción creada';
} else {
    $response['message'] = 'Error al crear: ' . $conn->error;
}

echo json_encode($response);

?>
