/*
 * ============================================================
 *  Ejemplo 07 — Alert Messages personalizados
 *
 *  En el panel: Configuración → Alert Messages
 *  Puedes poner cualquier texto para cada evento.
 *  Tu C++ recibe ese texto en result.error.
 *
 *  Ejemplo de configuración en el panel:
 *    expired_key      → "Tu licencia venció. Renuévala en discord.gg/xxx"
 *    key_banned       → "Cuenta suspendida por uso indebido."
 *    invalid_key      → "Licencia no encontrada. Verifica que la copiaste bien."
 *    device_limit     → "Máximo de PCs alcanzado. Contacta soporte."
 *    outdated_version → "Actualiza el loader desde nuestro Discord."
 * ============================================================
 */
#include "SaoAuth.hpp"
#include <iostream>

SaoAuth::api SaoAuthApp(
    "MiApp",
    "TU_OWNERID_AQUI",
    "TU_SECRET_AQUI",
    "1.0",
    "https://saoauth.com/api/client/auth"
);

// Mapa de códigos de error por defecto → título del MessageBox
// (por si el admin no configuró un mensaje personalizado)
std::map<std::string, std::string> ERROR_TITLES = {
    { "invalid_key",           "Licencia inválida"         },
    { "key_expired",           "Licencia expirada"         },
    { "key_banned",            "Licencia suspendida"       },
    { "device_limit_reached",  "Límite de dispositivos"    },
    { "outdated_version",      "Actualización requerida"   },
    { "app_disabled",          "Servicio no disponible"    },
    { "app_paused",            "Servicio pausado"          },
    { "login_disabled",        "Login desactivado"         },
    { "license_disabled",      "Licencias desactivadas"    },
    { "registration_disabled", "Registro desactivado"      },
    { "subscription_paused",   "Suscripción pausada"       },
    { "network_error",         "Error de conexión"         },
    { "parse_error",           "Error del servidor"        },
};

void ShowError(const std::string& errorCode) {
    // El errorCode ES el mensaje personalizado si lo configuraste en el panel
    // Si no configuraste nada, es el código por defecto (ej: "key_expired")

    std::string title = "Error";
    if (ERROR_TITLES.count(errorCode))
        title = ERROR_TITLES[errorCode];

    // Si el mensaje parece un código técnico (sin espacios, con guiones bajos)
    // lo convertimos a algo más legible
    std::string display = errorCode;
    bool isCode = (errorCode.find(' ') == std::string::npos &&
                   errorCode.find('_') != std::string::npos);
    if (isCode) {
        // Reemplazar _ por espacios y capitalizar
        for (char& c : display) if (c == '_') c = ' ';
        display[0] = toupper(display[0]);
    }

    MessageBoxA(nullptr, display.c_str(), title.c_str(), MB_ICONERROR);
}

int main() {
    std::string key;
    std::cout << "Licencia: ";
    std::cin >> key;

    auto result = SaoAuthApp.login(key);

    if (!result.success) {
        ShowError(result.error);
        return 1;
    }

    // ── Auth OK ───────────────────────────────────────────────────────────────
    std::cout << "Autenticado correctamente\n";

    // Mostrar anuncio si existe (también configurable en el panel)
    if (!result.announcement.empty()) {
        MessageBoxA(nullptr, result.announcement.c_str(),
                    "Aviso", MB_ICONINFORMATION);
    }

    return 0;
}
