<?php
require_once __DIR__ . '/../services/pdo_connection.php';
require_once __DIR__ . '/../config/app_config.php';

class ModelConfigEnvio
{
    private PDO $conn;

    public function __construct()
    {
        $this->conn = (new Database())->getConnection();
    }

    public function getConfig(): array
    {
        $defaults = [
            'id' => 1,
            'minimo_compra_gratis' => 250.00,
            'costo_envio' => 35.00,
            'envio_habilitado' => 1,
            'telefono_whatsapp' => defined('WHATSAPP_NEGOCIO_DEFAULT') ? WHATSAPP_NEGOCIO_DEFAULT : '527472603325',
        ];
        try {
            $stmt = $this->conn->query(
                'SELECT id, minimo_compra_gratis, costo_envio, envio_habilitado, telefono_whatsapp
                 FROM configuracion_envio WHERE id = 1 LIMIT 1'
            );
            $row = $stmt->fetch(PDO::FETCH_ASSOC);
            return $row ?: $defaults;
        } catch (PDOException $e) {
            error_log('ModelConfigEnvio: ' . $e->getMessage());
            return $defaults;
        }
    }

    public function updateConfig(array $data): bool
    {
        $sql = 'UPDATE configuracion_envio SET
            minimo_compra_gratis = :minimo,
            costo_envio = :costo,
            envio_habilitado = :habilitado,
            telefono_whatsapp = :whatsapp
            WHERE id = 1';
        $stmt = $this->conn->prepare($sql);
        return $stmt->execute([
            ':minimo' => (float)($data['minimo_compra_gratis'] ?? 250),
            ':costo' => (float)($data['costo_envio'] ?? 35),
            ':habilitado' => !empty($data['envio_habilitado']) ? 1 : 0,
            ':whatsapp' => preg_replace('/\D+/', '', (string)($data['telefono_whatsapp'] ?? '')),
        ]);
    }

    /**
     * Calcula costo de envío según subtotal de productos.
     */
    public function calcularCostoEnvio(float $subtotalProductos): float
    {
        $cfg = $this->getConfig();
        if (!(int)$cfg['envio_habilitado']) {
            return 0.0;
        }
        $minimo = (float)$cfg['minimo_compra_gratis'];
        $costo = (float)$cfg['costo_envio'];
        return $subtotalProductos >= $minimo ? 0.0 : $costo;
    }
}
