<?php

namespace App\Controllers;

use App\Core\Database;
use App\Core\View;
use App\Repositories\ComprasRepository;

/** Relatório de Compras configurável (espelho do de Vendas). */
class RelatorioComprasController
{
    private function repo(): ComprasRepository { return new ComprasRepository(Database::conectar()); }

    private function config(): array
    {
        $p = dirname(__DIR__, 2) . '/config/database.php';
        return file_exists($p) ? (require $p) : [];
    }

    private function guardaConexao(): void
    {
        if (!Database::estaConfigurado()) { header('Location: /configurar'); exit; }
    }

    public function index(): void
    {
        $this->guardaConexao();
        $config = $this->config();
        View::render('relatorios/compras-avancado', [
            'titulo'   => 'Relatório de Compras — Premium Express Gestão',
            'config'   => $config,
            'segmento' => \App\Core\Lojas::resolverSegmento($config),
            'ano'      => date('Y'),
        ]);
    }

    public function lookupsApi(): void
    {
        $this->guardaConexao();
        header('Content-Type: application/json; charset=utf-8');
        try {
            echo json_encode($this->repo()->relatorioComprasLookups(), JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE);
        } catch (\Throwable $e) {
            http_response_code(500);
            echo json_encode(['erro' => $e->getMessage()], JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE);
        }
        exit;
    }

    public function dadosApi(): void
    {
        $this->guardaConexao();
        header('Content-Type: application/json; charset=utf-8');
        try {
            $g = $_GET;
            $f = [
                'data_ini'  => $g['data_ini'] ?? null,
                'data_fim'  => $g['data_fim'] ?? null,
                'naturezas' => isset($g['naturezas']) ? array_filter(explode(',', (string)$g['naturezas'])) : [],
                'nota_ini'  => $g['nota_ini'] ?? null,
                'nota_fim'  => $g['nota_fim'] ?? null,
                'forn_ini'  => $g['forn_ini'] ?? null,
                'forn_fim'  => $g['forn_fim'] ?? null,
                'serie'     => $g['serie'] ?? null,
                'cond'      => $g['cond'] ?? null,
                'usuario'   => $g['usuario'] ?? null,
                'canceladas'=> $g['canceladas'] ?? 'excluir',
                'nfe'       => !empty($g['nfe']),
                'inc_transferencias' => !empty($g['inc_transferencias']),
                'inc_devolucoes'     => !empty($g['inc_devolucoes']),
                'inc_mov_interna'    => !empty($g['inc_mov_interna']),
                'produtos'  => !empty($g['produtos']),
                'ordenar'   => $g['ordenar'] ?? 'data',
                'limite'    => $g['limite'] ?? 1000,
            ];
            echo json_encode($this->repo()->relatorioCompras($f), JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE);
        } catch (\Throwable $e) {
            http_response_code(500);
            echo json_encode(['erro' => $e->getMessage()], JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE);
        }
        exit;
    }
}
