import { NextResponse } from "next/server";
import { cookies } from "next/headers";
import { buildLinkedInAuthUrl, createOAuthState } from "@/lib/auth/linkedin";

const STATE_COOKIE = "linkedin_oauth_state";
const REDIRECT_COOKIE = "postsync_login_redirect";
const STATE_MAX_AGE = 60 * 10;

export async function GET(request: Request) {
  try {
    const { searchParams } = new URL(request.url);
    const from = searchParams.get("from") ?? "/dashboard";
    const state = createOAuthState();
    const url = buildLinkedInAuthUrl(state);

    const response = NextResponse.redirect(url);
    response.cookies.set(STATE_COOKIE, state, {
      httpOnly: true,
      secure: process.env.NODE_ENV === "production",
      sameSite: "lax",
      maxAge: STATE_MAX_AGE,
      path: "/",
    });
    response.cookies.set(REDIRECT_COOKIE, from, {
      httpOnly: true,
      secure: process.env.NODE_ENV === "production",
      sameSite: "lax",
      maxAge: STATE_MAX_AGE,
      path: "/",
    });

    return response;
  } catch (error) {
    const message = error instanceof Error ? error.message : "OAuth failed";
    return NextResponse.json({ error: message }, { status: 500 });
  }
}

export async function DELETE() {
  const cookieStore = await cookies();
  cookieStore.delete(STATE_COOKIE);
  return NextResponse.json({ ok: true });
}
