<?php
declare(strict_types=1);

// /php/familias/list.php
// Lista familias para el panel derecho:
// - codigo_familia
// - apellido_familia
// - sectorizacion (id + nombre)
// - sector (id + nombre)
// - total_integrantes (COUNT desde usuarios.familia)

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

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

function safe_json_input(): array {
  $raw = file_get_contents('php://input');
  if ($raw === false) return [];
  $raw = trim($raw);
  if ($raw === '') return [];
  $decoded = json_decode($raw, true);
  return is_array($decoded) ? $decoded : [];
}

function json_out(array $payload, int $code = 200): void {
  http_response_code($code);
  header('Content-Type: application/json; charset=utf-8');
  echo json_encode($payload, JSON_UNESCAPED_UNICODE);
  exit;
}

try {
  $in = safe_json_input();

  $q  = trim((string)($in['q'] ?? ''));
  $sz = (string)($in['sectorizacion'] ?? '');
  $sc = (string)($in['sector'] ?? '');

  $where = [];
  $params = [];

  if ($sz !== '') { $where[] = "f.sectorizacion = :sz"; $params[':sz'] = $sz; }
  if ($sc !== '') { $where[] = "f.sector = :sc";         $params[':sc'] = $sc; }

  if ($q !== '') {
    $where[] = "(f.codigo_familia LIKE :q OR f.apellido_familia LIKE :q OR f.direccion LIKE :q)";
    $params[':q'] = "%{$q}%";
  }

  $whereSql = $where ? ("WHERE " . implode(" AND ", $where)) : "";

  // Detecta conexión
  $hasPdo = isset($pdo) && $pdo instanceof PDO;
  $hasMysqli = (isset($conexion) && $conexion instanceof mysqli) || (isset($conn) && $conn instanceof mysqli);

  if ($hasPdo) {
    // TOTAL
    $total = (int)$pdo->query("SELECT COUNT(*) FROM familias")->fetchColumn();

    // FILTRADAS
    $stc = $pdo->prepare("SELECT COUNT(*) FROM familias f $whereSql");
    $stc->execute($params);
    $filtered_total = (int)$stc->fetchColumn();

    // DATA
    $sql = "
      SELECT
        f.codigo_familia,
        f.apellido_familia,
        f.sectorizacion,
        f.sector,
        sz.nombre_sectorizacion,
        s.nombre_sector,
        COUNT(u.rut) AS total_integrantes,
        f.ultima_actualizacion
      FROM familias f
      LEFT JOIN sectorizacion sz ON sz.id = f.sectorizacion
      LEFT JOIN sectores s ON s.id = f.sector
      LEFT JOIN usuarios u ON u.familia = f.codigo_familia
      $whereSql
      GROUP BY
        f.codigo_familia, f.apellido_familia, f.sectorizacion, f.sector,
        sz.nombre_sectorizacion, s.nombre_sector, f.ultima_actualizacion
      ORDER BY f.ultima_actualizacion DESC
      LIMIT 250
    ";

    $st = $pdo->prepare($sql);
    $st->execute($params);
    $rows = $st->fetchAll(PDO::FETCH_ASSOC);

    json_out([
      'ok' => true,
      'total' => $total,
      'filtered_total' => $filtered_total,
      'data' => $rows
    ]);
  }

  if ($hasMysqli) {
    $mysqli = $conexion ?? $conn;

    // Para mysqli solo simplifico: sin filtros aún (puedes ampliarlo después)
    $resT = $mysqli->query("SELECT COUNT(*) AS c FROM familias");
    $total = (int)($resT->fetch_assoc()['c'] ?? 0);

    $sql = "
      SELECT
        f.codigo_familia,
        f.apellido_familia,
        f.sectorizacion,
        f.sector,
        sz.nombre_sectorizacion,
        s.nombre_sector,
        COUNT(u.rut) AS total_integrantes,
        f.ultima_actualizacion
      FROM familias f
      LEFT JOIN sectorizacion sz ON sz.id = f.sectorizacion
      LEFT JOIN sectores s ON s.id = f.sector
      LEFT JOIN usuarios u ON u.familia = f.codigo_familia
      GROUP BY f.codigo_familia
      ORDER BY f.ultima_actualizacion DESC
      LIMIT 250
    ";

    $res = $mysqli->query($sql);
    $rows = [];
    while ($row = $res->fetch_assoc()) $rows[] = $row;

    json_out([
      'ok' => true,
      'total' => $total,
      'filtered_total' => count($rows),
      'data' => $rows
    ]);
  }

  throw new RuntimeException("No se detectó conexión PDO ni mysqli en conexion.php");

} catch (Throwable $e) {
  error_log("LIST FAMILIAS ERROR: " . $e->getMessage());
  json_out(['ok' => false, 'message' => 'Error listando familias: ' . $e->getMessage()], 500);
}
