import { NextResponse } from "next/server";
import { mkdir, readFile, writeFile } from "fs/promises";
import path from "path";

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

type Subscriber = {
  email: string;
  created_at: string;
  source: string;
};

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

export async function POST(request: Request) {
  const body = (await request.json().catch(() => null)) as {
    email?: string;
    source?: string;
  } | null;
  const email = String(body?.email || "")
    .trim()
    .toLowerCase();

  if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
    return NextResponse.json({ message: "Email inválido" }, { status: 400 });
  }

  await mkdir(DATA_DIR, { recursive: true });
  const list = await readSubscribers();
  if (!list.some((item) => item.email === email)) {
    list.push({
      email,
      created_at: new Date().toISOString(),
      source: body?.source || "popup",
    });
    await writeFile(FILE, JSON.stringify(list, null, 2));
  }

  return NextResponse.json({ ok: true });
}
