<?php

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

if (!function_exists('cost_permission_catalog')) {
    function cost_permission_catalog() {
        return array(
            'costs.view' => array('label' => 'Ver costos', 'description' => 'Consulta costos, categorías y cierres.'),
            'costs.edit' => array('label' => 'Editar costos', 'description' => 'Crea y actualiza costos, categorías y recurrencias.'),
            'costs.approve' => array('label' => 'Aprobar costos', 'description' => 'Aprueba costos y sincroniza DTE recibidos.'),
            'costs.payroll.view' => array('label' => 'Ver remuneraciones', 'description' => 'Accede a información protegida de costo empresa.'),
            'costs.payroll.edit' => array('label' => 'Editar remuneraciones', 'description' => 'Crea y actualiza registros de costo empresa.'),
            'costs.close' => array('label' => 'Cerrar períodos', 'description' => 'Cierra o reabre meses de gestión.'),
            'costs.product.view' => array('label' => 'Ver costeo de productos', 'description' => 'Consulta versiones, componentes y cobertura del costo vendido.'),
            'costs.product.edit' => array('label' => 'Editar costeo de productos', 'description' => 'Crea y actualiza borradores de recetas y costos estándar.'),
            'costs.product.approve' => array('label' => 'Aprobar costeo de productos', 'description' => 'Activa versiones de costo y actualiza el costo vigente del catálogo.'),
            'costs.margin.view' => array('label' => 'Ver márgenes', 'description' => 'Consulta margen de contribución por producto y cliente.'),
        );
    }
}

if (!function_exists('cost_can')) {
    function cost_can($permissionKey) {
        if (current_user_role() === 'admin') return true;
        if ($permissionKey === 'costs.view') {
            return user_can('module.costs') || user_can('costs.view');
        }
        return user_can($permissionKey);
    }
}

if (!function_exists('cost_require')) {
    function cost_require($permissionKey) {
        if (!cost_can($permissionKey)) {
            http_response_code(403);
            throw new RuntimeException('No tienes permisos para realizar esta acción.');
        }
    }
}
