<?php

namespace App\Controllers;

use App\Core\Database;
use App\Core\Auth;

class LiaisonsController
{
    public function search(): void
    {
        header('Content-Type: application/json; charset=utf-8');
        
        $query = $_GET['q'] ?? '';
        $query = trim($query);
        
        if (strlen($query) < 2) {
            echo json_encode([]);
            return;
        }
        
        try {
            $pdo = Database::pdo();
            $stmt = $pdo->prepare('
                SELECT id, name, description 
                FROM liaisons 
                WHERE active = 1 
                AND (name LIKE ? OR description LIKE ?) 
                ORDER BY name 
                LIMIT 20
            ');
            $searchPattern = '%' . $query . '%';
            $stmt->execute([$searchPattern, $searchPattern]);
            $liaisons = $stmt->fetchAll();
            
            echo json_encode($liaisons, JSON_UNESCAPED_UNICODE);
        } catch (\Throwable $e) {
            http_response_code(500);
            echo json_encode(['error' => 'Erreur de recherche']);
        }
    }

    public function show(): void
    {
        header('Content-Type: application/json; charset=utf-8');
        
        $segments = explode('/', trim($_SERVER['REQUEST_URI'] ?? '', '/'));
        $id = null;
        
        // Trouver l'ID dans l'URL /liaisons/{id}
        for ($i = 0; $i < count($segments); $i++) {
            if ($segments[$i] === 'liaisons' && isset($segments[$i + 1])) {
                $id = (int)$segments[$i + 1];
                break;
            }
        }
        
        if (!$id) {
            http_response_code(404);
            echo json_encode(['error' => 'Liaison non trouvée']);
            return;
        }
        
        try {
            $pdo = Database::pdo();
            $stmt = $pdo->prepare('
                SELECT id, name, description 
                FROM liaisons 
                WHERE id = ? AND active = 1
            ');
            $stmt->execute([$id]);
            $liaison = $stmt->fetch();
            
            if (!$liaison) {
                http_response_code(404);
                echo json_encode(['error' => 'Liaison non trouvée']);
                return;
            }
            
            echo json_encode($liaison, JSON_UNESCAPED_UNICODE);
        } catch (\Throwable $e) {
            http_response_code(500);
            echo json_encode(['error' => 'Erreur serveur']);
        }
    }

    public function index(): void
    {
        if (!Auth::check()) { 
            $this->redirect('/login'); 
        }
        
        Auth::requireRole(['admin', 'agent', 'manager', 'superviseur', 'supervisor']);
        
        $pdo = Database::pdo();
        
        try {
            $liaisons = $pdo->query('SELECT * FROM liaisons WHERE active = 1 ORDER BY name')->fetchAll();
        } catch (\Throwable $e) {
            $liaisons = [];
        }
        
        $this->view('liaisons/index', compact('liaisons'));
    }

    private function view(string $view, array $data = []): void
    {
        extract($data);
        include dirname(__DIR__) . "/Views/{$view}.php";
    }

    private function redirect(string $url): void
    {
        header("Location: {$url}");
        exit;
    }
}