// Cuenta Xtream del cliente (server+user+pass) + login contra la ruta Node
// /api/xtream/login (que valida server-side contra los servidores del panel).
import { loadStored, removeStored, saveStored } from "./storage";

export interface XtreamAccount {
  server: string;
  username: string;
  password: string;
  user_info?: Record<string, unknown> | null;
  server_info?: Record<string, unknown> | null;
}

const KEY = "arvio.xtream.account";

export function loadXtreamAccount(): XtreamAccount | null {
  return loadStored<XtreamAccount | null>(KEY, null);
}
export function saveXtreamAccount(acc: XtreamAccount | null) {
  if (acc) saveStored(KEY, acc);
  else removeStored(KEY);
}

/** Valida usuario/contraseña contra los servidores del panel (server-side). */
export async function signInXtream(username: string, password: string): Promise<XtreamAccount> {
  const res = await fetch("/api/xtream/login", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ username: username.trim(), password })
  });
  const data = await res.json().catch(() => ({}));
  if (!res.ok) throw new Error(data?.error || "No se pudo iniciar sesión.");
  const acc: XtreamAccount = {
    server: data.server,
    username: data.username,
    password: data.password,
    user_info: data.user_info ?? null,
    server_info: data.server_info ?? null
  };
  saveXtreamAccount(acc);
  return acc;
}
