<?php
/**
 * CarrinhoController - Carrinho / seleção de pedido
 * Localização: /app/controllers/CarrinhoController.php
 */

class CarrinhoController extends Controller
{
    public function index(): void
    {
        if (!isset($_SESSION['cart'])) $_SESSION['cart'] = [];
        $this->view('public/carrinho', [
            'pageTitle' => 'Meu Pedido - OFFICE',
            'itens'     => $_SESSION['cart'],
            'config'    => config_marca(),
        ]);
    }

    public function adicionar(): void
    {
        $this->validateCsrf();
        $produtoId  = (int)$this->input('produto_id');
        $variacaoId = (int)$this->input('variacao_id', 0) ?: null;
        $qtd        = max(1, (int)$this->input('quantidade', 1));

        $produtoModel = $this->model('Produto');
        $produto = $produtoModel->find($produtoId);

        if (!$produto || !$produto['ativo']) {
            $this->setFlash('error', 'Produto não encontrado');
            $this->back();
            return;
        }

        $variacaoDesc = null;
        if ($variacaoId) {
            $v = $produtoModel->variacoes($produtoId);
            foreach ($v as $var) {
                if ((int)$var['id'] === $variacaoId) {
                    $variacaoDesc = trim(($var['cor'] ?? '') . ($var['cor_lente'] ? ' / Lente ' . $var['cor_lente'] : ''));
                    break;
                }
            }
        }

        $chave = $produtoId . '-' . ($variacaoId ?? '0');
        if (!isset($_SESSION['cart'])) $_SESSION['cart'] = [];

        if (isset($_SESSION['cart'][$chave])) {
            $_SESSION['cart'][$chave]['quantidade'] += $qtd;
        } else {
            $_SESSION['cart'][$chave] = [
                'produto_id'         => $produtoId,
                'variacao_id'        => $variacaoId,
                'produto_nome'       => $produto['nome'],
                'produto_sku'        => $produto['sku'],
                'produto_slug'       => $produto['slug'],
                'variacao_descricao' => $variacaoDesc,
                'quantidade'         => $qtd,
                'preco_unitario'     => (!empty($produto['mostrar_preco']) && !empty($produto['preco'])) ? (float)$produto['preco'] : null,
                'imagem'             => null,
            ];
            // imagem principal
            $imgs = $produtoModel->imagens($produtoId);
            if (!empty($imgs[0]['arquivo'])) {
                $_SESSION['cart'][$chave]['imagem'] = $imgs[0]['arquivo'];
            }
        }

        $this->setFlash('success', 'Produto adicionado ao seu pedido');
        $this->redirect(url('carrinho'));
    }

    public function remover(string $chave): void
    {
        unset($_SESSION['cart'][$chave]);
        $this->setFlash('success', 'Item removido');
        $this->redirect(url('carrinho'));
    }

    public function atualizar(): void
    {
        $this->validateCsrf();
        $quantidades = $_POST['quantidade'] ?? [];
        foreach ($quantidades as $chave => $qtd) {
            $qtd = max(1, (int)$qtd);
            if (isset($_SESSION['cart'][$chave])) {
                $_SESSION['cart'][$chave]['quantidade'] = $qtd;
            }
        }
        $this->setFlash('success', 'Pedido atualizado');
        $this->redirect(url('carrinho'));
    }

    public function limpar(): void
    {
        $_SESSION['cart'] = [];
        $this->redirect(url('carrinho'));
    }
}
