<?php
/**
 * PedidoController - Finalização pública do pedido
 * Localização: /app/controllers/PedidoController.php
 */

class PedidoController extends Controller
{
    public function checkout(): void
    {
        if (empty($_SESSION['cart'])) {
            $this->redirect(url('catalogo'));
            return;
        }
        $this->view('public/checkout', [
            'pageTitle' => 'Finalizar Pedido - OFFICE',
            'itens'     => $_SESSION['cart'],
            'config'    => config_marca(),
        ]);
    }

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

        if (empty($_SESSION['cart'])) {
            $this->redirect(url('catalogo'));
            return;
        }

        // Validação básica
        $erros = [];
        $nome      = trim($this->input('cliente_nome',''));
        $telefone  = trim($this->input('cliente_telefone',''));
        $email     = trim($this->input('cliente_email',''));
        if (!$nome)      $erros[] = 'Informe seu nome';
        if (!$telefone)  $erros[] = 'Informe seu telefone';
        if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) $erros[] = 'Email inválido';

        if ($erros) {
            $this->setFlash('error', implode(' | ', $erros));
            $this->redirect(url('checkout'));
            return;
        }

        $dadosCliente = [
            'cliente_nome'       => $nome,
            'cliente_empresa'    => trim($this->input('cliente_empresa','')) ?: null,
            'cliente_telefone'   => $telefone,
            'cliente_email'      => $email,
            'cliente_cidade'     => trim($this->input('cliente_cidade','')) ?: null,
            'cliente_estado'     => trim($this->input('cliente_estado','')) ?: null,
            'cliente_documento'  => trim($this->input('cliente_documento','')) ?: null,
            'observacoes'        => trim($this->input('observacoes','')) ?: null,
        ];

        $itens = array_values($_SESSION['cart']);

        try {
            $pedidoModel = $this->model('Pedido');
            $pedido_id   = $pedidoModel->criarComItens($dadosCliente, $itens);
            $pedido      = $pedidoModel->find($pedido_id);

            // Limpa carrinho
            $_SESSION['cart'] = [];

            // Envia notificação por email (tenta, não quebra se falhar)
            try {
                $this->enviarEmailConfirmacao($pedido, $itens);
            } catch (Exception $e) {
                // opcional: log
            }

            // Salva id para tela de sucesso
            $_SESSION['ultimo_pedido'] = $pedido_id;
            $this->redirect(url('pedido/sucesso/' . $pedido['codigo']));
        } catch (Exception $e) {
            $this->setFlash('error', 'Erro ao registrar pedido: ' . $e->getMessage());
            $this->redirect(url('checkout'));
        }
    }

    public function sucesso(string $codigo): void
    {
        $pedidoModel = $this->model('Pedido');
        $pedido = $pedidoModel->findBy('codigo', $codigo);
        if (!$pedido) {
            $this->redirect(url());
            return;
        }
        $itens = $pedidoModel->itens((int)$pedido['id']);

        $this->view('public/pedido_sucesso', [
            'pageTitle' => 'Pedido Confirmado - OFFICE',
            'pedido'    => $pedido,
            'itens'     => $itens,
            'config'    => config_marca(),
        ]);
    }

    private function enviarEmailConfirmacao(array $pedido, array $itens): void
    {
        // Usa PHPMailer se disponível; caso contrário mail() padrão
        $config = config_marca();
        $destinoAdmin = $config['email_notificacao'] ?? MAIL_ADMIN;

        ob_start();
        include VIEWS_PATH . '/emails/novo_pedido.php';
        $corpoHtml = ob_get_clean();

        $assunto = "Novo pedido: " . $pedido['codigo'];

        $phpmailer = ROOT_PATH . '/vendor/phpmailer/phpmailer/src/PHPMailer.php';
        if (file_exists($phpmailer)) {
            require_once ROOT_PATH . '/vendor/autoload.php';
            $mail = new PHPMailer\PHPMailer\PHPMailer(true);
            $mail->isSMTP();
            $mail->Host = MAIL_HOST;
            $mail->SMTPAuth = true;
            $mail->Username = MAIL_USER;
            $mail->Password = MAIL_PASS;
            $mail->Port = MAIL_PORT;
            $mail->CharSet = 'UTF-8';
            $mail->setFrom(MAIL_FROM_EMAIL, MAIL_FROM_NAME);
            $mail->addAddress($destinoAdmin);
            $mail->addAddress($pedido['cliente_email'], $pedido['cliente_nome']);
            $mail->isHTML(true);
            $mail->Subject = $assunto;
            $mail->Body = $corpoHtml;
            $mail->send();
        } else {
            // fallback simples
            $headers = "MIME-Version: 1.0\r\n";
            $headers .= "Content-type: text/html; charset=utf-8\r\n";
            $headers .= "From: " . MAIL_FROM_NAME . " <" . MAIL_FROM_EMAIL . ">\r\n";
            @mail($destinoAdmin, $assunto, $corpoHtml, $headers);
            @mail($pedido['cliente_email'], $assunto, $corpoHtml, $headers);
        }
    }
}
