<?php
// Guardar o actualizar familiar (apoderado)
require_once __DIR__ . '/../config/db_auto.php';
require_once __DIR__ . '/db_utils.php';
header('Content-Type: application/json');

use function App\DB\upsert;

$input = json_decode(file_get_contents('php://input'), true);
if (!$input || !isset($input['run'])) {
    echo json_encode(['success' => false, 'error' => 'Datos incompletos']);
    exit;
}
try {
    // Validar campos obligatorios antes de continuar
    $required_fields = ['run', 'nombre', 'ap_paterno'];
    foreach ($required_fields as $field) {
        if (empty($input[$field])) {
            // Lanza una excepción que será capturada por el bloque catch
            throw new Exception("El campo '$field' del familiar es obligatorio.");
        }
    }

    // Limpiar y luego formatear el RUN para guardarlo siempre con guion.
    $run_cleaned = preg_replace('/[^0-9kK]/', '', strtoupper($input['run']));
    if (strlen($run_cleaned) > 1) {
        $run_formatted = substr($run_cleaned, 0, -1) . '-' . substr($run_cleaned, -1);
    } else {
        $run_formatted = $run_cleaned; // Evitar error con RUNs cortos/inválidos
    }

    // Lista de campos permitidos en la tabla 'familiares'
    $allowed_fields = ['nombre', 'ap_paterno', 'ap_materno', 'domicilio', 'parentesco', 'telefono', 'telefono2', 'email', 'escolaridad', 'profesion', 'actividad_laboral'];
    // Filtra el array de entrada para usar solo los campos permitidos y no nulos/vacíos
    $data_to_save = [];
    foreach ($allowed_fields as $field) {
        if (isset($input[$field]) && $input[$field] !== '') {
            $data_to_save[$field] = $input[$field];
        }
    }
    // Usar la función upsert
    upsert($pdo, 'familiares', $data_to_save, 'run', $run_formatted);

    // Después de guardar, obtenemos el ID para devolverlo.
    // Esto hace que el proceso de asociación sea más robusto.
    $stmt = $pdo->prepare("SELECT id FROM familiares WHERE run = ?");
    $stmt->execute([$run_formatted]);
    $familiar = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$familiar) throw new Exception("Error crítico: no se pudo encontrar el familiar inmediatamente después de guardarlo.");

    echo json_encode(['success' => true, 'familiar_id' => $familiar['id']]);
} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
