// Almacén de servidores Xtream (multi-DNS) para el panel admin. JSON en disco
// (VPS lo persiste). Solo servidor (Node) — NO importar en el cliente.
import { promises as fs } from "node:fs";
import path from "node:path";

export interface XtreamServer {
  id: string;
  url: string;        // ej. http://gol-tv.online:80
  label?: string;
  active: boolean;
  order: number;
}

const DATA_DIR = path.join(process.cwd(), "data");
const FILE = path.join(DATA_DIR, "xtream-servers.json");

async function readAll(): Promise<XtreamServer[]> {
  try {
    const raw = await fs.readFile(FILE, "utf8");
    const arr = JSON.parse(raw);
    return Array.isArray(arr) ? arr : [];
  } catch {
    return [];
  }
}

async function writeAll(list: XtreamServer[]): Promise<void> {
  await fs.mkdir(DATA_DIR, { recursive: true });
  await fs.writeFile(FILE, JSON.stringify(list, null, 2), "utf8");
}

export async function listServers(): Promise<XtreamServer[]> {
  return (await readAll()).sort((a, b) => a.order - b.order);
}

/** Servidores activos, en orden, para probar el login. */
export async function activeServers(): Promise<XtreamServer[]> {
  return (await listServers()).filter((s) => s.active);
}

export async function addServer(url: string, label = ""): Promise<XtreamServer> {
  const list = await readAll();
  const clean = url.trim().replace(/\/+$/, "");
  const srv: XtreamServer = {
    id: Math.random().toString(36).slice(2, 10),
    url: clean,
    label: label.trim(),
    active: true,
    order: list.length
  };
  list.push(srv);
  await writeAll(list);
  return srv;
}

export async function updateServer(id: string, patch: Partial<XtreamServer>): Promise<void> {
  const list = await readAll();
  const i = list.findIndex((s) => s.id === id);
  if (i < 0) return;
  list[i] = { ...list[i], ...patch };
  await writeAll(list);
}

export async function deleteServer(id: string): Promise<void> {
  const list = (await readAll()).filter((s) => s.id !== id);
  await writeAll(list);
}
