import type { LoaderFunctionArgs } from "react-router";
import { getActivePlans, getAllPlans } from "../services/plan-config.server";
import { authenticateAdminRequest } from "../services/admin-auth.server";

const corsHeaders = {
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Methods": "GET, OPTIONS",
  "Access-Control-Allow-Headers": "*, Content-Type, Authorization, X-Requested-With, Cache-Control, Pragma, Accept, Origin",
  "Access-Control-Max-Age": "86400",
  "Content-Type": "application/json",
};

export const loader = async ({ request }: LoaderFunctionArgs) => {
  if (request.method === "OPTIONS") {
    return new Response(null, { status: 204, headers: corsHeaders });
  }

  const url = new URL(request.url);
  const includeInactive = url.searchParams.get("all") === "true";

  if (includeInactive) {
    const authResult = authenticateAdminRequest(request);
    if (!authResult.isAuthenticated) {
      return new Response(JSON.stringify({ error: "Unauthorized" }), {
        status: 401,
        headers: corsHeaders,
      });
    }
    const allPlans = await getAllPlans();
    return new Response(JSON.stringify({ success: true, plans: allPlans }), {
      status: 200,
      headers: corsHeaders,
    });
  }

  const activePlans = await getActivePlans();
  return new Response(JSON.stringify({ success: true, plans: activePlans }), {
    status: 200,
    headers: corsHeaders,
  });
};
