<?php
// app/Models/StatisticTypeRepository.php
// Repozitář pro typy statistik týmu – CRUD a ověření příslušnosti k týmu (tabulka statistiky_typy).

namespace App\Models;

use App\Core\Database;
use App\Models\Entities\StatisticTypeEntity;

/**
 * Poskytuje metody pro správu typů statistik (např. "Góly", "Asistence").
 * Každý typ patří jednomu týmu; operace vždy ověřují kombinaci typeId + teamId.
 */
class StatisticTypeRepository extends BaseRepository
{
    public function __construct(Database $db)
    {
        parent::__construct($db, 'statistiky_typy', StatisticTypeEntity::class);
    }

    /**
     * Získá všechny statistické typy pro tým
     */
    public function getByTeamId(int $teamId): array
    {
        $stmt = $this->pdo->prepare(
            "SELECT * FROM `statistiky_typy` WHERE `tym_id` = ? ORDER BY `nazev`"
        );
        $stmt->execute([$teamId]);
        
        $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
        return array_map(fn($row) => $this->mapRowToEntity($row), $rows);
    }



    /**
     * Vytvoří nový typ statistiky
     */
    public function create(int $teamId, string $name): int
    {
        $stmt = $this->pdo->prepare(
            "INSERT INTO `statistiky_typy` (`tym_id`, `nazev`) VALUES (?, ?)"
        );
        $stmt->execute([$teamId, $name]);
        return (int)$this->pdo->lastInsertId();
    }

    /**
     * Přejmenuje typ statistiky
     */
    public function rename(int $typeId, int $teamId, string $name): bool
    {
        $stmt = $this->pdo->prepare(
            "UPDATE `statistiky_typy` SET `nazev` = ? WHERE `id` = ? AND `tym_id` = ?"
        );
        return $stmt->execute([$name, $typeId, $teamId]);
    }

    /**
     * Smaže typ statistiky
     */
    public function deleteByTeamAndId(int $teamId, int $typeId): bool
    {
        $stmt = $this->pdo->prepare(
            "DELETE FROM `statistiky_typy` WHERE `id` = ? AND `tym_id` = ?"
        );
        return $stmt->execute([$typeId, $teamId]);
    }

    /**
     * Zjistí, zda typ patří do týmu
     */
    public function belongsToTeam(int $typeId, int $teamId): bool
    {
        $stmt = $this->pdo->prepare(
            "SELECT COUNT(*) as cnt FROM `statistiky_typy` WHERE `id` = ? AND `tym_id` = ?"
        );
        $stmt->execute([$typeId, $teamId]);
        $result = $stmt->fetch(\PDO::FETCH_ASSOC);
        return (int)($result['cnt'] ?? 0) > 0;
    }
}
