<?php

require_once __DIR__ . '/../../core/permissions.php';

if (!function_exists('billing_permission_catalog')) {
    function billing_permission_catalog()
    {
        return array(
            'billing.view' => array('label' => 'Ver facturación', 'description' => 'Consulta documentos, cobranzas y archivos tributarios.'),
            'billing.prepare' => array('label' => 'Preparar facturas', 'description' => 'Valida cotizaciones y revisa el documento antes de emitir.'),
            'billing.issue.production' => array('label' => 'Emitir facturas reales', 'description' => 'Envía documentos tributarios a FACTO producción. Requiere confirmación final.'),
            'billing.receivables.collect' => array('label' => 'Registrar cobros', 'description' => 'Registra pagos sobre cuentas por cobrar.'),
            'billing.receivables.manage' => array('label' => 'Administrar cobranza', 'description' => 'Edita condiciones y reabre cuentas por cobrar.'),
            'billing.payments.reverse' => array('label' => 'Anular pagos', 'description' => 'Anula pagos registrados y devuelve el saldo a por cobrar.'),
            'billing.inbox.receive' => array('label' => 'Gestionar DTE recibidos', 'description' => 'Sincroniza y revisa documentos tributarios de proveedores.'),
            'billing.inbox.decide' => array('label' => 'Aceptar o reclamar DTE', 'description' => 'Registra decisiones tributarias sobre documentos recibidos.'),
        );
    }
}

if (!function_exists('billing_expand_user_permissions')) {
    function billing_expand_user_permissions(array $permissions)
    {
        $billingKeys = array_keys(billing_permission_catalog());
        if (array_intersect($permissions, $billingKeys) && !in_array('module.billing', $permissions, true)) {
            $permissions[] = 'module.billing';
        }
        if (in_array('billing.issue.production', $permissions, true) && !in_array('billing.prepare', $permissions, true)) {
            $permissions[] = 'billing.prepare';
        }
        if (in_array('billing.prepare', $permissions, true) && !in_array('billing.view', $permissions, true)) {
            $permissions[] = 'billing.view';
        }
        return array_values(array_unique($permissions));
    }
}
