<?php
include "core/autoload.php";

include "core/app/model/PersonData.php";
include "core/app/model/UserData.php";
include "core/app/model/ChanceData.php";
include "core/app/helpers/pagination.php";

// Filtro por rol (tykun-visual-refactor-v2)
// Validar que $_SESSION['user_id'] existe (search_clients.php se llama via AJAX sin pasar por index.php necesariamente)
if (!isset($_SESSION)) { session_start(); }
if (!isset($_SESSION['user_id']) || empty($_SESSION['user_id'])) {
    http_response_code(401);
    echo json_encode(['error' => 'not_authenticated', 'cards' => '', 'pagination' => '']);
    exit;
}
$currentUser = UserData::getById($_SESSION['user_id']);
$userKind = $currentUser ? (int)($currentUser->kind_id ?? 0) : 0;
$isAdmin = $userKind === 1;
$loggedUserId = $currentUser ? $currentUser->id : null;

// Captura el término de búsqueda
$search = isset($_GET['search']) ? trim($_GET['search']) : '';

// Captura el parámetro de página (1-indexed)
$page = isset($_GET['page']) ? max(1, (int) $_GET['page']) : 1;
$perPage = 25;

// Total de clientes (sin filtro de búsqueda para paginación consistente)
$total = PersonData::countAll();

$pagination = paginate($total, $perPage, $page);

// SIEMPRE cargar clients del user (filtrado por rol) primero
$allClients = PersonData::getAll();
if (!$isAdmin && $loggedUserId) {
    $allClients = array_values(array_filter($allClients, fn($c) => isset($c->user_id) && $c->user_id == $loggedUserId));
}

// Aplicar filtro de búsqueda si hay
if ($search !== '') {
    $filteredClients = [];
    foreach ($allClients as $c) {
        if (stripos($c->name, $search) !== false || stripos($c->name_c, $search) !== false) {
            $filteredClients[] = $c;
        }
    }
    // Paginar resultados filtrados
    $clients = array_slice($filteredClients, $pagination['offset'], $pagination['perPage']);
    $total = count($filteredClients);
    $pagination = paginate($total, $perPage, $page);
} else {
    // Paginar TODOS los clients del user (ya filtrados por rol arriba)
    $clients = array_slice($allClients, $pagination['offset'], $pagination['perPage']);
    $total = count($allClients);
    $pagination = paginate($total, $perPage, $page);
}

// Genera el HTML de las tarjetas
$cardsHtml = '';
if (count($clients) > 0) {
    foreach ($clients as $c):
        $cardsHtml .= '<div class="col" data-item="list">';
        $cardsHtml .= '<div class="card">';
        $cardsHtml .= '<div class="card-body card-thumbnail">';
        $cardsHtml .= '<a href="#" onclick="window.location.href=\'./?view=client&id=' . $c->id . '\';">';
        $cardsHtml .= '<div class="p-3 d-flex justify-content-center align-items-center iq-document rounded bg-body">';
        $cardsHtml .= '<img src="assets\icons\building.svg" class="img-fluid" style="width: 70px; height: 70px;" loading="lazy" alt="">';
        $cardsHtml .= '</div>';
        $cardsHtml .= '</a>';
        $cardsHtml .= '<div class="mt-2">';
        $cardsHtml .= '<div class="d-flex align-items-center justify-content-center text-primary w-100" style="height: 3rem;">';
        $cardsHtml .= '<h5 class="mb-0 text-center w-100" style="font-size: 0.9rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.2; margin: 0 auto; max-width: 95%;">';
        $cardsHtml .= htmlspecialchars($c->name);
        $cardsHtml .= '</h5>';
        $cardsHtml .= '</div>';
        $cardsHtml .= '</div>';
        $cardsHtml .= '</div>';
        $cardsHtml .= '</div>';
        $cardsHtml .= '</div>';
    endforeach;
} else {
    if ($search !== '') {
        $cardsHtml = '<div class="col-12"><p class="text-center text-muted py-4">No se encontraron clientes con el término "<strong>' . htmlspecialchars($search) . '</strong>".</p></div>';
    } else {
        $cardsHtml = '<div class="col-12"><div class="alert alert-info text-center" role="status"><p>No hay clientes aún. <a href="index.php?view=clientadd">Agrega el primero</a>.</p></div></div>';
    }
}

// Genera HTML de paginación
$paginationHtml = renderPagination($pagination, 'index.php?view=clients');

// Respuesta JSON
header('Content-Type: application/json');
echo json_encode([
    'cards' => $cardsHtml,
    'pagination' => $paginationHtml,
    'total' => $pagination['total'],
    'perPage' => $pagination['perPage'],
    'currentPage' => $pagination['currentPage'],
    'totalPages' => $pagination['totalPages'],
    'hasPrev' => $pagination['hasPrev'],
    'hasNext' => $pagination['hasNext'],
    'search' => $search,
]);
?>