<?php
// app/Models/ChatRepository.php
// Repozitář pro týmový chat – načítání zpráv, odesílání a mazání (tabulka zpravy).

namespace App\Models;

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

/**
 * Poskytuje metody pro čtení a zápis chatových zpráv v týmu.
 */
class ChatRepository extends BaseRepository
{
    public function __construct(Database $db)
    {
        parent::__construct($db, 'zpravy', ChatEntity::class);
    }

    //vypíše zprávy daného týmu seřazené od nejstarších
    public function getTeamMessages(int $teamId, int $limit = 100): array
    {
        $stmt = $this->pdo->prepare(
            "SELECT z.*, u.jmeno, u.prijmeni, u.uzivatelske_jmeno
             FROM zpravy z
             JOIN uzivatele u ON u.id = z.uzivatel_id
             WHERE z.tym_id = :tym_id
             ORDER BY z.datum ASC
             LIMIT :limit"
        );
        $stmt->bindValue(':tym_id', $teamId, \PDO::PARAM_INT);
        $stmt->bindValue(':limit', $limit, \PDO::PARAM_INT);
        $stmt->execute();
        
        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }

    // vytvoří novou zprávu
    public function sendMessage(int $teamId, int $userId, string $content): int
    {
        $stmt = $this->pdo->prepare(
            "INSERT INTO zpravy (tym_id, uzivatel_id, obsah, datum)
             VALUES (:tym_id, :uzivatel_id, :obsah, NOW())"
        );

        $stmt->execute([
            ':tym_id' => $teamId,
            ':uzivatel_id' => $userId,
            ':obsah' => $content
        ]);

        return (int)$this->pdo->lastInsertId();
    }

    // smaže zprávu 
    public function deleteMessage(int $messageId, int $userId, bool $isAdmin): bool
    {
        if ($isAdmin) {
            $stmt = $this->pdo->prepare("DELETE FROM zpravy WHERE id = :id");
            $stmt->execute([':id' => $messageId]);
        } else {
            $stmt = $this->pdo->prepare("DELETE FROM zpravy WHERE id = :id AND uzivatel_id = :uid");
            $stmt->execute([':id' => $messageId, ':uid' => $userId]);
        }

        return $stmt->rowCount() > 0;
    }
}
