<?php
/**
 * ASISMA CRM - Helper de UF
 * Entrega el valor de la UF del día desde mindicador.cl, con caché diaria en
 * storage/uf_cache.json (mismo patrón que el UfHelper de ASISMA OPS).
 */
class UfHelper {

    private static function rutaCache() {
        return ROOT_DIR . '/storage/uf_cache.json';
    }

    /**
     * Valor de la UF de hoy (2 decimales). Orden: caché del día → API →
     * caché antigua → valor de respaldo.
     */
    public static function valorUf() {
        $ruta = self::rutaCache();

        if (file_exists($ruta)) {
            $cache = json_decode(file_get_contents($ruta), true);
            if (isset($cache['fecha']) && $cache['fecha'] === date('Y-m-d') && $cache['valor'] > 0) {
                return round((float)$cache['valor'], 2);
            }
        }

        $valor = self::consultarApi();
        if ($valor > 0) {
            $dir = dirname($ruta);
            if (!is_dir($dir)) @mkdir($dir, 0775, true);
            @file_put_contents($ruta, json_encode(array(
                'fecha'      => date('Y-m-d'),
                'valor'      => $valor,
                'updated_at' => date('Y-m-d H:i:s')
            )));
            return round($valor, 2);
        }

        // Respaldo: la caché aunque sea antigua
        if (file_exists($ruta)) {
            $cache = json_decode(file_get_contents($ruta), true);
            if (isset($cache['valor']) && $cache['valor'] > 0) return round((float)$cache['valor'], 2);
        }

        // Último recurso (valor aproximado a mediados de 2026)
        return 40500.00;
    }

    private static function consultarApi() {
        $ch = curl_init('https://mindicador.cl/api/uf');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        $respuesta = curl_exec($ch);
        curl_close($ch);

        if (!$respuesta) return 0;
        $datos = json_decode($respuesta, true);
        return isset($datos['serie'][0]['valor']) ? (float)$datos['serie'][0]['valor'] : 0;
    }
}
