<?php

if (!function_exists('clp')) {
    function clp($amount)
    {
        return '$' . number_format((float) $amount, 0, ',', '.');
    }
}

if (!function_exists('pct')) {
    function pct($value)
    {
        return number_format((float) $value, 0, ',', '.') . '%';
    }
}

if (!function_exists('safe_text')) {
    function safe_text($value)
    {
        return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8');
    }
}

// NUEVO: Limpia el RUT antes de enviarlo a la base de datos (Ej: 76.123.456-7 -> 76123456-7)
if (!function_exists('clean_rut')) {
    function clean_rut($rut)
    {
        $rut = trim((string) $rut);
        if ($rut === '') return '';
        // Removemos los puntos y forzamos la letra K a mayúscula
        $rut = str_replace('.', '', $rut);
        return strtoupper($rut);
    }
}

// NUEVO: Formatea un RUT limpio para mostrarlo en pantalla (Ej: 76123456-7 -> 76.123.456-7)
if (!function_exists('format_rut')) {
    function format_rut($rut)
    {
        $rut = trim((string) $rut);
        if ($rut === '') return '';
        
        // Limpiamos por si acaso ya venía con puntos
        $rut = str_replace('.', '', $rut);
        $parts = explode('-', $rut);
        
        if (count($parts) === 2) {
            $body = number_format((int) $parts[0], 0, '', '.');
            return $body . '-' . strtoupper($parts[1]);
        }
        
        return $rut; 
    }
}

if (!function_exists('icylab_payment_terms_options')) {
    function icylab_payment_terms_options()
    {
        return array(
            'contado' => 'Contado',
            'credito_15' => 'Crédito 15 días',
            'credito_30' => 'Crédito 30 días',
            'credito_45' => 'Crédito 45 días',
            'otro' => 'Otra condición de pago'
        );
    }
}

if (!function_exists('icylab_normalize_payment_terms')) {
    function icylab_normalize_payment_terms($value)
    {
        $value = trim((string) $value);
        if ($value === '') return 'contado';

        $normalized = strtolower($value);
        $normalized = str_replace(array(' ', '-', 'dias', 'días'), array('_', '_', '', ''), $normalized);
        $normalized = trim($normalized, '_');

        $map = array(
            '0' => 'contado',
            'contado' => 'contado',
            'prepago' => 'contado',
            '15' => 'credito_15',
            'credito_15' => 'credito_15',
            'credit_15' => 'credito_15',
            '30' => 'credito_30',
            'credito_30' => 'credito_30',
            'credit_30' => 'credito_30',
            '45' => 'credito_45',
            'credito_45' => 'credito_45',
            'credit_45' => 'credito_45',
            'otro' => 'otro',
            'otra' => 'otro',
            'otros' => 'otro'
        );

        if (isset($map[$normalized])) {
            return $map[$normalized];
        }

        return array_key_exists($value, icylab_payment_terms_options()) ? $value : 'otro';
    }
}

if (!function_exists('icylab_payment_terms_label')) {
    function icylab_payment_terms_label($value)
    {
        $key = icylab_normalize_payment_terms($value);
        $options = icylab_payment_terms_options();
        return $options[$key] ?? $options['contado'];
    }
}

if (!function_exists('format_quantity')) {
    function format_quantity($value)
    {
        $num = round((float) $value, 3);
        return rtrim(rtrim(number_format($num, 3, '.', ''), '0'), '.');
    }
}

if (!function_exists('parse_quantity')) {
    function parse_quantity($value)
    {
        $raw = str_replace(',', '.', trim((string) $value));
        return round((float) $raw, 3);
    }
}
