<?php
// app/Controllers/StatisticTypeController.php
// Controller pro správu typů statistik (kategorií jako "Góly", "Asistence") v rámci týmu.

namespace App\Controllers;

use App\Core\Controller;
use App\Core\Auth;
use App\Core\Database;
use App\Models\StatisticTypeRepository;
use App\Models\TeamRepository;

/**
 * Umožňuje adminovi, trenérovi a asistentovi přidávat a mazat typy statistik pro tým.
 */
class StatisticTypeController extends Controller
{
    private StatisticTypeRepository $typeRepo;
    private TeamRepository $teamRepo;

    public function __construct(Database $db)
    {
        parent::__construct($db);
        Auth::requireLogin();
        $this->typeRepo = new StatisticTypeRepository($db);
        $this->teamRepo = new TeamRepository($db);
    }

    /**
     * Vytvoření nového typu
     */
    public function create()
    {
        $teamId = (int)($_GET['team_id'] ?? 0);

        if ($teamId <= 0) {
            $this->view->render('error', ['message' => 'Tým není specifikován']);
            return;
        }

        $team = $this->teamRepo->find($teamId);
        if (!$team) {
            $this->view->render('error', ['message' => 'Tým nenalezen']);
            return;
        }

        // Ověřit oprávnění
        $user = Auth::user();
        $teamRole = $this->teamRepo->getUserTeamRole($teamId, $user['id']);
        if ($user['role'] !== 'admin' && $teamRole !== 'trener' && $teamRole !== 'asistent') {
            http_response_code(403);
            $this->view->render('error', ['message' => 'Nemáte oprávnění']);
            return;
        }

        $this->view->render('teams/statistiky/create', [
            'team' => $team
        ]);
    }

    /**
     * Uložit nový typ
     */
    public function store()
    {
        $user = Auth::user();
        $teamId = (int)($_POST['team_id'] ?? 0);
        $name = trim($_POST['nazev'] ?? '');

        if (!$teamId || !$name) {
            $_SESSION['error'] = 'Název statistiky je povinný';
            header("Location: " . BASE_URL . "/statistictype/create?team_id={$teamId}");
            exit;
        }

        $team = $this->teamRepo->find($teamId);
        if (!$team) {
            http_response_code(404);
            $this->view->render('error', ['message' => 'Tým nenalezen']);
            return;
        }

        // Ověřit oprávnění
        $teamRole = $this->teamRepo->getUserTeamRole($teamId, $user['id']);
        if ($user['role'] !== 'admin' && $teamRole !== 'trener' && $teamRole !== 'asistent') {
            http_response_code(403);
            $this->view->render('error', ['message' => 'Nemáte oprávnění']);
            return;
        }

        // Vytvoření nového typu bez sportu (sport je automaticky určen týmem)
        $this->typeRepo->create($teamId, $name);

        Auth::setFlash('success', 'Statistika byla úspěšně přidána!');
        header("Location: " . BASE_URL . "/team/show?id={$teamId}#stats-tab");
        exit;
    }

    /**
     * Smazání typu
     */
    public function delete()
    {
        $user = Auth::user();
        $teamId = (int)($_GET['team_id'] ?? 0);
        $typeId = (int)($_GET['id'] ?? 0);

        if (!$teamId || !$typeId) {
            http_response_code(400);
            $this->view->render('error', ['message' => 'Chybí parametry']);
            return;
        }

        // Ověřit, že typ patří do týmu a že má oprávnění
        if (!$this->typeRepo->belongsToTeam($typeId, $teamId)) {
            http_response_code(404);
            $this->view->render('error', ['message' => 'Typ nenalezen']);
            return;
        }

        $teamRole = $this->teamRepo->getUserTeamRole($teamId, $user['id']);
        if ($user['role'] !== 'admin' && $teamRole !== 'trener' && $teamRole !== 'asistent') {
            http_response_code(403);
            $this->view->render('error', ['message' => 'Nemáte oprávnění']);
            return;
        }

        $this->typeRepo->deleteByTeamAndId($teamId, $typeId);

        Auth::setFlash('success', 'Statistika byla úspěšně smazána!');
        header("Location: " . BASE_URL . "/team/show?id={$teamId}#stats-tab");
        exit;
    }
}
