<?php

declare(strict_types=1);

class Categoria extends Model
{
    public function ativas(): array
    {
        return $this->db->query("SELECT * FROM categorias WHERE ativo = 1 ORDER BY nome ASC")->fetchAll();
    }

    public function todas(): array
    {
        return $this->db->query("SELECT * FROM categorias ORDER BY nome ASC")->fetchAll();
    }

    public function buscarPorId(int $id): ?array
    {
        $stmt = $this->db->prepare("SELECT * FROM categorias WHERE id = :id LIMIT 1");
        $stmt->execute(['id' => $id]);
        $item = $stmt->fetch();

        return $item ?: null;
    }

    public function criar(array $dados): int
    {
        $stmt = $this->db->prepare(
            "INSERT INTO categorias (nome, icone, cor, sla_dias, ativo)
             VALUES (:nome, :icone, :cor, :sla_dias, :ativo)"
        );

        $stmt->execute([
            'nome' => $dados['nome'],
            'icone' => $dados['icone'] !== '' ? $dados['icone'] : null,
            'cor' => $dados['cor'] !== '' ? $dados['cor'] : null,
            'sla_dias' => (int) $dados['sla_dias'],
            'ativo' => (int) $dados['ativo'],
        ]);

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

    public function atualizar(int $id, array $dados): bool
    {
        $stmt = $this->db->prepare(
            "UPDATE categorias
                SET nome = :nome,
                    icone = :icone,
                    cor = :cor,
                    sla_dias = :sla_dias,
                    ativo = :ativo
              WHERE id = :id"
        );

        return $stmt->execute([
            'id' => $id,
            'nome' => $dados['nome'],
            'icone' => $dados['icone'] !== '' ? $dados['icone'] : null,
            'cor' => $dados['cor'] !== '' ? $dados['cor'] : null,
            'sla_dias' => (int) $dados['sla_dias'],
            'ativo' => (int) $dados['ativo'],
        ]);
    }
}
