<?php

namespace App\Helpers\Environment;

use App\Models\Environment\Business;

class SystemModulesHelper
{
  //* For General Use
    //- As Logged-In User
    public static function getModuleStatus(string $module)
    {
        // Validar si el módulo proporcionado esta activo en el sistema
        return self::getPanelStatus() && session("modules.$module", false);
    }

    public static function getPanelStatus(){
        // Validar si el panel de control esta activo en el sistema
        return session("modules.enable_panel", false) && Business::first()->enable_modules_panel;
    }

    public static function getVisualizationPanelStatus(){
        // Validar si el panel de control esta activo en el sistema
        return session("modules.show_panel", false) && Business::first()->show_modules_panel;
    }

    //- As Guest User
    public static function getGuestModuleStatus(string $module)
    {
        // Validar de forma externa si el módulo proporcionado esta activo en el sistema
        $business = Business::first();
            $panel_status = $business->enable_modules_panel;
            $modules_configuration = $business->modules_configuration;

        return $panel_status && data_get($modules_configuration, "has_$module", false);
    }

  //* For Specific Modules
    //- Invoicing
        /**
         *  Asegura que el establecimiento tenga configurado sus Datos Fiscales y este dado de alta en Facturapi
         */
        public static function isEstablishmentTaxDataComplete() {
        // Control Data
            $establishment = Business::first();
            $fields = ['facturapi_account_id', 'legal_name', 'tax_id','email', 'zip'];

            if (SystemEnvHelper::isCurrentCountry("MEX")) // Campos solo requeridos en México
                $fields = array_merge($fields, ['tax_system', 'cer_encrypted', 'key_encrypted', 'cer_password']);

            // Si el campo no existe o está vacío/nulo
            foreach ($fields as $field) {
                $value = $establishment?->$field ?? null;

                if (
                    is_null($value) ||
                    (is_string($value) && trim($value) === '') ||
                    (is_array($value) && empty($value)) ||
                    (is_object($value) && empty((array)$value))
                ) return false;
            }

            return true;
        }
}

