<?php
/**
 * CategoriaAdminController - CRUD de categorias
 * Localização: /app/controllers/CategoriaAdminController.php
 */

class CategoriaAdminController extends Controller
{
    public function index(): void
    {
        $this->requireAdmin();
        $page = max(1, (int)$this->input('page',1));
        $result = $this->model('Categoria')->listarPaginado($page, ADMIN_ITEMS_PER_PAGE);

        $this->view('admin/categorias/index', [
            'pageTitle'  => 'Categorias',
            'items'      => $result['items'],
            'pagination' => $result,
        ], 'admin');
    }

    public function salvar(): void
    {
        $this->requireAdmin();
        $this->validateCsrf();

        $id = (int)$this->input('id',0);
        $nome = trim($this->input('nome',''));
        if (!$nome) { $this->setFlash('error','Nome obrigatório'); $this->redirect(admin_url('categorias')); return; }

        $slug = slugify($this->input('slug','') ?: $nome);
        // garante unicidade
        $base = $slug; $i = 1;
        while (true) {
            $stmt = Database::getInstance()->prepare("SELECT id FROM categorias WHERE slug = :s AND id <> :i LIMIT 1");
            $stmt->execute([':s'=>$slug,':i'=>$id]);
            if (!$stmt->fetch()) break;
            $slug = $base . '-' . (++$i);
        }

        $dados = [
            'nome'      => $nome,
            'slug'      => $slug,
            'descricao' => trim($this->input('descricao','')) ?: null,
            'ordem'     => (int)$this->input('ordem',0),
            'ativo'     => $this->input('ativo') ? 1 : 0,
        ];

        if ($id) $this->model('Categoria')->update($id,$dados);
        else     $this->model('Categoria')->create($dados);

        $this->setFlash('success','Categoria salva');
        $this->redirect(admin_url('categorias'));
    }

    public function excluir(int $id): void
    {
        $this->requireAdmin();
        $this->model('Categoria')->delete($id);
        $this->setFlash('success','Categoria excluída');
        $this->redirect(admin_url('categorias'));
    }
}
