import requests
from bs4 import BeautifulSoup
import json
import time
import urllib3

# Desactivar advertencias de SSL
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# --- CONFIGURACIÓN ---
# Ajusta según tu entorno (Local o VPS)
RUTA_JSON = "tasas.json"
# RUTA_JSON = "/var/www/html/tasas.json"

def get_bcv_rate(currency_code="dolar"):
    """
    Extrae tasa BCV. 
    currency_code puede ser: "dolar" o "euro" (IDs del HTML del BCV)
    """
    print(f"Consultando BCV ({currency_code})...")
    try:
        url = "http://www.bcv.org.ve/"
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
        }
        response = requests.get(url, headers=headers, verify=False, timeout=15)
        
        if response.status_code == 200:
            soup = BeautifulSoup(response.content, "html.parser")
            # El BCV usa id="dolar" e id="euro"
            target_div = soup.find("div", {"id": currency_code})
            
            if target_div:
                rate_text = target_div.find("strong").text.strip().replace(',', '.')
                return float(rate_text)
    except Exception as e:
        print(f"--- Error BCV {currency_code}: {e}")
    
    return 0.0

def get_binance_data(asset="USDT", trade_type="BUY"):
    """
    Consulta Binance P2P para un activo específico (USDT o USDC).
    Retorna {min, max, avg}
    """
    print(f"Consultando Binance {asset} ({trade_type})...")
    try:
        url = "https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search"
        headers = {"Content-Type": "application/json", "User-Agent": "Mozilla/5.0"}
        
        payload = {
            "fiat": "VES",
            "page": 1,
            "rows": 20, 
            "tradeType": trade_type, 
            "asset": asset, # <--- Ahora es dinámico (USDT o USDC)
            "countries": [],
            "proMerchantAds": False, 
            "shieldMerchantAds": False,
            "publisherType": None,
            "payTypes": ["PagoMovil", "BankVenezuela"],
            "transAmount": 500,
            "classifies": ["mass", "profession"]
        }

        response = requests.post(url, json=payload, headers=headers, timeout=10)
        data = response.json()

        if data["code"] == "000000" and data["data"]:
            ads = data["data"]
            prices = [float(ad["adv"]["price"]) for ad in ads]
            
            if prices:
                precio_min = min(prices)
                precio_max = max(prices)
                promedio = (precio_min + precio_max) / 2
                
                return {
                    "min": precio_min,
                    "max": precio_max,
                    "avg": promedio
                }

    except Exception as e:
        print(f"--- Error Binance {asset} {trade_type}: {e}")
    
    return {"min": 0.0, "max": 0.0, "avg": 0.0}

def generate_json():
    print("--- INICIANDO ---")
    
    # 1. Obtener datos BCV
    bcv_usd = get_bcv_rate("dolar")
    bcv_eur = get_bcv_rate("euro")

    # 2. Obtener datos Binance USDT
    usdt_buy = get_binance_data("USDT", "BUY")
    usdt_sell = get_binance_data("USDT", "SELL")

    # 3. Obtener datos Binance USDC
    usdc_buy = get_binance_data("USDC", "BUY")
    usdc_sell = get_binance_data("USDC", "SELL")
    
    # 4. Estructura del JSON Final
    data_final = {
        "bcv": {
            "usd": bcv_usd,
            "eur": bcv_eur
        },
        "usdt": {
            "compra": usdt_buy,
            "venta": usdt_sell
        },
        "usdc": {
            "compra": usdc_buy,
            "venta": usdc_sell
        },
        "last_update": int(time.time()),
        "readable_date": time.strftime('%Y-%m-%d %H:%M:%S')
    }

    # 5. Guardar
    with open(RUTA_JSON, "w") as f:
        json.dump(data_final, f, indent=4)
    
    print(f"- Guardado en: {RUTA_JSON}")
    print(f"--- Resumen: BCV($)={bcv_usd} | BCV(€)={bcv_eur} | USDT={usdt_buy['avg']} | USDC={usdc_buy['avg']}")

if __name__ == "__main__":
    generate_json()