<?php
declare(strict_types=1);

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

$u = require_login();
require_module_access($u, "usuarios");

$rut = normalize_rut((string)($_GET['rut'] ?? ''));
if ($rut === '') {
  json_response(['ok' => false, 'message' => 'RUT requerido.'], 400);
}

try {
  fp_ensure_percapita_columns($pdo);

  $stmt = $pdo->prepare("SELECT
      u.rut, u.fecha_nacimiento, u.edad, u.apellidos, u.nombres, u.genero, u.estado_civil, u.escolaridad, u.profesion, u.prevision,
      u.inscrito_cesfam, u.percapitado, u.fecha_actualizacion_percapita, u.migrante, u.nacionalidad, u.pueblo_originario, u.direccion, u.latitud, u.longitud,
      u.sector, u.sectorizacion, u.celular, u.telefonos, u.participacion_ciudadana, u.parentezco, u.familia,
      COALESCE(NULLIF(u.estratificacion_riesgo, ''), 'G0') AS estratificacion_riesgo,
      COALESCE(
        u.cantidad_condiciones_cronicas,
        diag.diag_count,
        CASE
          WHEN COALESCE(TRIM(u.detalle_diagnosticos_cronicos), '') = '' THEN 0
          ELSE (LENGTH(u.detalle_diagnosticos_cronicos) - LENGTH(REPLACE(u.detalle_diagnosticos_cronicos, '|', '')) + 1)
        END,
        0
      ) AS cantidad_condiciones_cronicas,
      u.fecha_actualizacion_estratificacion,
      COALESCE(u.detalle_diagnosticos_cronicos, '') AS detalle_diagnosticos_cronicos,
      u.creado_en, u.ultima_actualizacion, u.registrado_por
    FROM usuarios u
    LEFT JOIN (
      SELECT usuario_rut, COUNT(*) AS diag_count
      FROM usuario_diagnosticos_cronicos
      GROUP BY usuario_rut
    ) diag ON diag.usuario_rut = u.rut
    WHERE u.rut = ?
    LIMIT 1");
  $stmt->execute([$rut]);
  $row = $stmt->fetch();

  if (!$row) json_response(['ok' => false, 'message' => 'No encontrado.'], 404);
  json_response(['ok' => true, 'data' => $row]);
} catch (Throwable $e) {
  error_log('PERSONAS GET ERROR: ' . $e->getMessage());
  json_response(['ok' => false, 'message' => 'Error obteniendo persona.'], 500);
}
