<?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, "vivienda");

if (!function_exists('respond')) {
  function respond(array $payload, int $code = 200): void { json_response($payload, $code); }
}
if (!function_exists('respond_error')) {
  function respond_error(string $msg, int $code = 400): void { json_response(['ok'=>false,'message'=>$msg], $code); }
}

$id  = trim((string)($_GET['id'] ?? ''));
$cod = trim((string)($_GET['cod'] ?? $_GET['codigo'] ?? ''));

if ($id === '' && $cod === '') {
  respond_error("ID o código requerido", 400);
}

try {
  // 1) Vivienda
  if ($id !== '') {
    $st = $pdo->prepare("
      SELECT
        v.*,
        sz.nombre_sectorizacion,
        s.nombre_sector
      FROM vivienda v
      LEFT JOIN sectorizacion sz ON sz.id = v.sectorizacion
      LEFT JOIN sectores s ON s.id = v.sector
      WHERE v.id = :id
      LIMIT 1
    ");
    $st->execute([':id' => $id]);
  } else {
    $st = $pdo->prepare("
      SELECT
        v.*,
        sz.nombre_sectorizacion,
        s.nombre_sector
      FROM vivienda v
      LEFT JOIN sectorizacion sz ON sz.id = v.sectorizacion
      LEFT JOIN sectores s ON s.id = v.sector
      WHERE v.cod_vivienda = :cod
      LIMIT 1
    ");
    $st->execute([':cod' => $cod]);
  }

  $v = $st->fetch(PDO::FETCH_ASSOC);
  if (!$v) respond_error("Vivienda no encontrada", 404);

  $vid = (string)$v['id'];

  // 2) Condiciones
  $stC = $pdo->prepare("
    SELECT agua, luz, cocina, deposicion, basuras, animales_vectores
    FROM condiciones_vivienda
    WHERE id_vivienda = :id
    LIMIT 1
  ");
  $stC->execute([':id' => $vid]);
  $cond = $stC->fetch(PDO::FETCH_ASSOC);
  if (!$cond) $cond = [
    'agua'=>null,'luz'=>null,'cocina'=>null,'deposicion'=>null,'basuras'=>null,'animales_vectores'=>null
  ];

  // 3) Familias (tabla puente)
  $familias = [];
  try {
    $stF = $pdo->prepare("
      SELECT vf.codigo_familia, f.apellido_familia
      FROM vivienda_familias vf
      LEFT JOIN familias f ON f.codigo_familia = vf.codigo_familia
      WHERE vf.id_vivienda = :id
      ORDER BY vf.codigo_familia
    ");
    $stF->execute([':id' => $vid]);
    $rowsF = $stF->fetchAll(PDO::FETCH_ASSOC);
    if (is_array($rowsF)) {
      foreach ($rowsF as $f) {
        $familias[] = [
          'codigo' => (string)($f['codigo_familia'] ?? ''),
          'apellido' => (string)($f['apellido_familia'] ?? ''),
        ];
      }
    }
  } catch (Throwable $e) {
    // fallback si no existe la tabla puente
    if (!empty($v['codigo_familia'])) {
      $familias[] = ['codigo'=>(string)$v['codigo_familia'], 'apellido'=>''];
    }
  }

  $data = $v;
  $data['condiciones'] = $cond;
  $data['familias'] = $familias;

  respond(['ok'=>true, 'data'=>$data]);

} catch (Throwable $e) {
  error_log("VIVIENDA get ERROR: ".$e->getMessage());
  respond_error("Error de servidor", 500);
}
