<?php
namespace App\Controllers;

use App\Core\Controller;
use App\Core\Auth;
use App\Core\Database;
use PDO;

class SLAController extends Controller
{
    public function index(): void
    {
        if (!Auth::check()) { $this->redirect('/login'); }
        Auth::requireRole(['admin']);
        
        $pdo = Database::pdo();
        $types = $pdo->query('SELECT * FROM maintenance_types ORDER BY name')->fetchAll();
        $slas = $pdo->query('
            SELECT s.*, m.name as maintenance_type_name 
            FROM sla_policies s 
            JOIN maintenance_types m ON m.id = s.maintenance_type_id 
            ORDER BY m.name, s.priority
        ')->fetchAll();
        
        $this->view('sla/index', compact('types', 'slas'));
    }

    public function storeType(): void
    {
        if (!Auth::check()) { $this->redirect('/login'); }
        Auth::requireRole(['admin']);
        
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') { $this->redirect('/sla'); }
        
        $name = trim($_POST['name'] ?? '');
        if ($name) {
            $pdo = Database::pdo();
            $stmt = $pdo->prepare('INSERT INTO maintenance_types (name) VALUES (?)');
            $stmt->execute([$name]);
        }
        $this->redirect('/sla');
    }

    public function storeSLA(): void
    {
        if (!Auth::check()) { $this->redirect('/login'); }
        Auth::requireRole(['admin']);
        
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') { $this->redirect('/sla'); }
        
        $typeId = (int)($_POST['maintenance_type_id'] ?? 0);
        $priority = $_POST['priority'] ?? 'Moyenne';
        $responseMinutes = (int)($_POST['response_minutes'] ?? 60);
        $resolutionMinutes = (int)($_POST['resolution_minutes'] ?? 240);
        
        if ($typeId && $responseMinutes > 0 && $resolutionMinutes > 0) {
            $pdo = Database::pdo();
            $stmt = $pdo->prepare('
                INSERT INTO sla_policies (maintenance_type_id, priority, response_minutes, resolution_minutes) 
                VALUES (?, ?, ?, ?)
                ON DUPLICATE KEY UPDATE 
                response_minutes = VALUES(response_minutes),
                resolution_minutes = VALUES(resolution_minutes)
            ');
            $stmt->execute([$typeId, $priority, $responseMinutes, $resolutionMinutes]);
        }
        $this->redirect('/sla');
    }

    public function deleteSLA(): void
    {
        if (!Auth::check()) { $this->redirect('/login'); }
        Auth::requireRole(['admin']);
        
        $id = (int)($_GET['id'] ?? 0);
        if ($id) {
            $pdo = Database::pdo();
            $stmt = $pdo->prepare('DELETE FROM sla_policies WHERE id = ?');
            $stmt->execute([$id]);
        }
        $this->redirect('/sla');
    }
}
