<?php
// app/Controllers/DochazkaController.php
// Controller pro evidenci docházky hráčů na události daného týmu.

namespace App\Controllers;

use App\Core\Controller;
use App\Core\Auth;
use App\Models\DochazkaRepository;
use App\Models\UdalostRepository;
use App\Core\Database;

class DochazkaController extends Controller
{
    public function __construct(Database $db)
    {
        parent::__construct($db);
        Auth::requireLogin();
    }

    /**
     * Zobrazí přehled událostí se souhrnem docházky pro daný tým.
     * Tým se předává jako GET parametr id.
     */
    public function index()
    {
        $teamId = isset($_GET['id']) ? (int)$_GET['id'] : null;

        if (!$teamId) {
            // v případě že není zadán tým zobrazí chybovou hlášku
            $this->view->render('teams/dochazka/index', [
                'meetings' => [],
                'attendanceSummary' => [],
                'team' => null,
                'error' => 'Není zadán tým.'
            ]);
            return;
        }

        $repo = new UdalostRepository($this->db);
        $meetings = $repo->getEventsForTeam($teamId);
        $attendanceSummary = [];
        if (!empty($meetings)) {
            $meetingIds = array_column($meetings, 'id');
            $dochazkaRepo = new \App\Models\DochazkaRepository($this->db);
            $attendanceSummary = $dochazkaRepo->getAttendanceSummaryForMeetings($meetingIds);
        }
        $this->view->render('teams/dochazka/index', [
            'meetings' => $meetings,
            'attendanceSummary' => $attendanceSummary,
            'team' => $teamId
        ]);
    }

    /**
     * Zobrazí docházkový formulář pro konkrétní událost.
     * Filtruje jen hráče (ne trenéry); ověří, zda má uživatel právo editovat.
     */
    public function show()
    {
        $meetingId = $_GET['id'] ?? null;
        $repo = new UdalostRepository($this->db);
        $meeting = $repo->findWithTeam($meetingId);
        $teamRepo = new \App\Models\TeamRepository($this->db);
        $allMembers = $teamRepo->getMembers($meeting['tym_id']);
        
        // Filtruj jen hráče (ne trenéry)
        $members = array_filter($allMembers, function($m) {
            return $m['role_v_tymu'] !== 'trener';
        });
        
        $dochazkaRepo = new DochazkaRepository($this->db);
        $dochazka = $dochazkaRepo->getDochazkaForMeeting($meetingId);

        // Kontrola oprávnění - trenér, admin nebo asistent v týmu mohou upravovat
        $user = Auth::user();
        $canEdit = ($user['role'] === 'admin');
        if (!$canEdit) {
            $teamRole = $teamRepo->getUserTeamRole($meeting['tym_id'], $user['id']);
            $canEdit = ($teamRole === 'trener' || $teamRole === 'asistent');
        }
        
        $this->view->render('teams/dochazka/show', [
            'meeting' => $meeting,
            'members' => $members,
            'dochazka' => $dochazka,
            'team' => $meeting['tym_id'],
            'canEdit' => $canEdit
        ]);
    }

    /**
     * Zpracuje POST s docházkovými daty a uloží je.
     * Nahradí celou docházku pro danou událost novými záznamy.
     */
    public function save()
    {
        $user = Auth::user();
        $meetingId = $_GET['id'] ?? null;
        $dochazka = $_POST['dochazka'] ?? [];

        $repo = new UdalostRepository($this->db);
        $meeting = $repo->findWithTeam($meetingId);

        $canEdit = ($user['role'] === 'admin');
        if (!$canEdit && $meeting) {
            $teamRepo = new \App\Models\TeamRepository($this->db);
            $teamRole = $teamRepo->getUserTeamRole($meeting['tym_id'], $user['id']);
            $canEdit = ($teamRole === 'trener' || $teamRole === 'asistent');
        }

        if (!$canEdit) {
            http_response_code(403);
            $this->view->render('error', ['message' => 'Nemáte oprávnění upravovat docházku']);
            return;
        }
        
        $dochazkaRepo = new DochazkaRepository($this->db);
        $dochazkaRepo->saveDochazka($meetingId, $dochazka);
        
        Auth::setFlash('success', 'Docházka byla úspěšně uložena!');
        header('Location: ' . BASE_URL . '/team/show?id=' . $meeting['tym_id']);
        exit;
    }
}
