<?php
session_start();
if (!isset($_SESSION['usuario_id']) || $_SESSION['rol'] !== 'admin') {
    echo json_encode(['success' => false, 'message' => 'No tienes permisos para realizar esta acción']);
    exit;
}

require_once '../includes/config.php';
require_once '../includes/db.php';

$db = new Database();

// Verificar que se recibieron todos los datos necesarios
$required_fields = ['cuota_id', 'numero_cuota', 'monto', 'fecha_vencimiento', 'estado'];
foreach ($required_fields as $field) {
    if (!isset($_POST[$field]) || empty($_POST[$field])) {
        echo json_encode(['success' => false, 'message' => "El campo {$field} es requerido"]);
        exit;
    }
}

try {
    $db->query("START TRANSACTION");

    // Preparar los datos básicos
    $data = [
        'numero_cuota' => (int)$_POST['numero_cuota'],
        'monto' => (float)$_POST['monto'],
        'fecha_vencimiento' => $_POST['fecha_vencimiento'],
        'estado' => $_POST['estado'],
        'cuota_id' => (int)$_POST['cuota_id']
    ];

    // Si el estado es PAGADO, establecer la fecha de pago
    if ($data['estado'] === 'PAGADO' && !$_POST['fecha_pago']) {
        $data['fecha_pago'] = date('Y-m-d');
    } else {
        $data['fecha_pago'] = $_POST['fecha_pago'] ?: null;
    }

    // Manejar la fecha de pago según el estado
    if ($_POST['estado'] === 'PAGADO') {
        $data['fecha_pago'] = !empty($_POST['fecha_pago']) ? $_POST['fecha_pago'] : date('Y-m-d');
    } else {
        $data['fecha_pago'] = null;
    }

    // Actualizar la cuota con cálculo automático de fechas de aviso
    $stmt = $db->prepare("
        UPDATE cuotas c,
               (SELECT dias_primer_aviso, dias_tercer_aviso FROM configuracion LIMIT 1) conf
        SET c.numero_cuota = ?,
            c.monto = ?,
            c.fecha_vencimiento = ?,
            c.estado = ?,
            c.fecha_pago = ?,
            c.primer_aviso = DATE_SUB(?, INTERVAL conf.dias_primer_aviso DAY),
            c.segundo_aviso = ?,
            c.tercer_aviso = DATE_ADD(?, INTERVAL conf.dias_tercer_aviso DAY)
        WHERE c.id = ?
    ");

    $stmt->execute([
        $data['numero_cuota'],
        $data['monto'],
        $data['fecha_vencimiento'],
        $data['estado'],
        $data['fecha_pago'],
        $data['fecha_vencimiento'], // Para calcular primer_aviso
        $data['fecha_vencimiento'], // Para segundo_aviso
        $data['fecha_vencimiento'], // Para calcular tercer_aviso
        $data['cuota_id']
    ]);

    // Registrar la actividad
    $stmt = $db->prepare("
        INSERT INTO registro_actividad_usuario 
        (id_usuario, tipo_accion, detalles_accion, direccion_ip, agente_usuario)
        VALUES (?, 'EDICION_CUOTA', ?, ?, ?)
    ");
    
    $descripcion = "Editó la cuota #{$data['numero_cuota']} (ID: {$data['cuota_id']})";
    $ip = $_SERVER['REMOTE_ADDR'] ?? '';
    $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
    $stmt->execute([$_SESSION['usuario_id'], $descripcion, $ip, $userAgent]);

    $db->query("COMMIT");
    echo json_encode(['success' => true, 'message' => 'Cuota actualizada correctamente']);
} catch (PDOException $e) {
    $db->query("ROLLBACK");
    error_log("Error en editar_cuota.php: " . $e->getMessage());
    echo json_encode(['success' => false, 'message' => 'Error al actualizar la cuota']);
}
?>
