<?php
namespace App\Controllers;

use App\Core\Database;
use App\Core\View;
use App\Core\Auth;

class LeitorPermissoesController
{
    private static function permPath(): string
    {
        return dirname(__DIR__, 2) . '/config/leitor_permissoes.php';
    }

    public static function lerPermissoes(): array
    {
        $path = self::permPath();
        if (!file_exists($path)) return ['_default' => ['consulta']];
        $data = require $path;
        return is_array($data) ? $data : ['_default' => ['consulta']];
    }

    public static function permissoesDoUsuario(string $codUsuario): array
    {
        $todas = self::lerPermissoes();
        $key   = strtoupper(trim($codUsuario));
        if (isset($todas[$key])) return $todas[$key];
        return $todas['_default'] ?? ['consulta'];
    }

    private static function salvarPermissoes(array $perms): void
    {
        $export = var_export($perms, true);
        file_put_contents(
            self::permPath(),
            "<?php\n// Permissões do Leitor Fire por usuário ERP\n// Chave = COD_USUARIO em maiúsculo\n// '_default' = permissões para usuários não listados\nreturn {$export};\n"
        );
    }

    private static function listarUsuariosERP(): array
    {
        try {
            if (!Database::estaConfigurado()) return [];
            $pdo = Database::conectar();
            $st  = $pdo->query(
                "SELECT FIRST 200
                    TRIM(u.COD_USUARIO) AS COD_USUARIO,
                    TRIM(COALESCE(u.NOME, u.COD_USUARIO)) AS NOME
                 FROM USUARIOS u
                 WHERE u.COD_USUARIO IS NOT NULL
                   AND TRIM(u.COD_USUARIO) <> ''
                 ORDER BY u.COD_USUARIO"
            );
            return $st->fetchAll(\PDO::FETCH_ASSOC);
        } catch (\Throwable) {
            return [];
        }
    }

    public const TODAS_PERMISSOES = [
        'consulta'           => 'Consultar produtos',
        'consultar_cupom'    => 'Consultar cupom fiscal (QR Code NF-e)',
        'alterar_estoque'    => 'Ajustar estoque',
        'alterar_preco'      => 'Alterar precos',
        'alterar_dados'      => 'Editar dados (NCM, peso, unidade)',
        'alterar_foto'       => 'Atualizar foto',
        'inventario'         => 'Modulo de inventario (contar produtos)',
        'inventario_encerrar'=> 'Encerrar sessao de inventario e aplicar ajustes',
        'fiscal_caixa'       => 'Fiscal de Caixa (consultar fechamentos)',
        'fiscal_risco'       => 'Fiscal: ver analise fiscal com/sem nota (SENSIVEL)',
        'fiscal_anotar'      => 'Fiscal: anotar justificativa em divergencias',
        'fiscal_conferir'    => 'Fiscal: marcar fechamento como conferido',
        'fiscal_aprovar'     => 'Fiscal: aprovar conferencia do fechamento',
    ];

    // ── GET/POST /leitor-admin/permissoes ─────────────────────────────────────

    public function index(): void
    {
        // Exige admin autenticado (login único libera toda a Configuração)
        Auth::verificarOuRedirecionar();

        $permissoes = self::lerPermissoes();
        $usuarios   = self::listarUsuariosERP();
        $todasPerms = self::TODAS_PERMISSOES;
        $salvo      = false;

        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $nova = [];

            // Permissões padrão
            $nova['_default'] = array_values(array_filter(
                array_keys(self::TODAS_PERMISSOES),
                fn($p) => !empty($_POST['perm__default_' . $p])
            ));
            if (empty($nova['_default'])) $nova['_default'] = ['consulta'];

            // Permissões por usuário
            foreach ($usuarios as $u) {
                $key = strtoupper(trim($u['COD_USUARIO']));
                if (!empty($_POST['custom_' . $key])) {
                    $nova[$key] = array_values(array_filter(
                        array_keys(self::TODAS_PERMISSOES),
                        fn($p) => !empty($_POST['perm_' . $key . '_' . $p])
                    ));
                    if (empty($nova[$key])) $nova[$key] = ['consulta'];
                }
            }

            self::salvarPermissoes($nova);
            $permissoes = $nova;
            $salvo = true;
        }

        View::render('leitor/permissoes', [
            'titulo'     => 'Permissões do Leitor — BI',
            'permissoes' => $permissoes,
            'usuarios'   => $usuarios,
            'todasPerms' => $todasPerms,
            'salvo'      => $salvo,
            'ano'        => date('Y'),
        ]);
    }
}
