<?php
declare(strict_types=1);

require_once __DIR__ . '/../auth/guard.php';
require_once __DIR__ . '/../conexion.php';
require_once __DIR__ . '/../_helpers.php';

$u = require_login();
require_module_access($u, "familias"); // por si después necesitas rut/rol

// ---- Aliases para compatibilidad con tu proyecto ----
if (!function_exists('respond')) {
  function respond(array $payload, int $status = 200): void {
    // En tu proyecto existe json_response() (lo usa guard.php)
    json_response($payload, $status);
  }
}

if (!function_exists('respond_error')) {
  function respond_error(string $message, int $status = 400, array $extra = []): void {
    json_response(array_merge(['ok' => false, 'message' => $message], $extra), $status);
  }
}

// ---- Helpers locales ----
function get_param(string $key): string {
  return trim((string)($_GET[$key] ?? ''));
}

function json_arr_or_empty($val): array {
  if ($val === null || $val === '') return [];
  if (is_array($val)) return $val;
  if (!is_string($val)) return [];
  $d = json_decode($val, true);
  return is_array($d) ? $d : [];
}

// Acepta ?cod= o ?codigo= o ?codigo_familia=
$cod = get_param('cod') ?: get_param('codigo') ?: get_param('codigo_familia');

if ($cod === '') {
  respond_error("Código de familia requerido", 400);
}

try {
  // 1) Familia
  $st = $pdo->prepare("
    SELECT *
    FROM familias
    WHERE codigo_familia = :cod
    LIMIT 1
  ");
  $st->execute([':cod' => $cod]);
  $familia = $st->fetch(PDO::FETCH_ASSOC);

  if (!$familia) {
    respond_error("Familia no encontrada", 404);
  }

  // 2) Integrantes (usuarios.familia)
  $stI = $pdo->prepare("
    SELECT rut
    FROM usuarios
    WHERE familia = :cod
    ORDER BY rut
  ");
  $stI->execute([':cod' => $cod]);
  $integrantes = $stI->fetchAll(PDO::FETCH_COLUMN);
  if (!is_array($integrantes)) $integrantes = [];

  // 3) Clasificación
  $stC = $pdo->prepare("
    SELECT
      tipo_familia,
      etapa_ciclo_familia,
      factores_protectores,
      factores_riesgo,
      puntaje_riesgo,
      clasificacion_riesgo
    FROM clasificacion_familiar
    WHERE codigo_familia = :cod
    LIMIT 1
  ");
  $stC->execute([':cod' => $cod]);
  $clas = $stC->fetch(PDO::FETCH_ASSOC);

  if ($clas) {
    $clas['factores_protectores'] = json_arr_or_empty($clas['factores_protectores'] ?? null);
    $clas['factores_riesgo']      = json_arr_or_empty($clas['factores_riesgo'] ?? null);
  } else {
    $clas = null;
  }

  respond([
    'ok' => true,
    'data' => array_merge($familia, [
      'integrantes'   => $integrantes,
      'clasificacion' => $clas
    ])
  ]);

} catch (Throwable $e) {
  error_log("GET FAMILIAS ERROR | codigo={$cod} | " . $e->getMessage());
  respond_error("Error cargando familia", 500);
}
