// api/checkout/route.ts

import { createClient } from "@/utils/supabase/server";
import Stripe from "stripe";

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY || "", {
    apiVersion: "2024-10-28.acacia",
});

// ... existing imports and stripe initialization ...

export async function POST(req: Request) {
    const {
        quantity,
        color,
        free_shipping,
    }: { quantity: number; color: string; free_shipping: boolean } =
        await req.json();

    console.log("foobar", quantity, color, free_shipping);

    const supabase = createClient();
    const {
        data: { session },
    } = await supabase.auth.getSession();

    const successUrl = session
        ? `${req.headers.get("origin")}/home?session_id={CHECKOUT_SESSION_ID}`
        : `${req.headers.get("origin")}/login?session_id={CHECKOUT_SESSION_ID}`;

    try {
        const stripeSession = await stripe.checkout.sessions.create({
            line_items: [
                {
                    price: "price_1R4nqzLTb7Djmo1RZuUmWj6c",
                    quantity: quantity,
                },
            ],
            mode: "payment",
            success_url: successUrl,
            cancel_url: `${req.headers.get("origin")}`,
            billing_address_collection: "required",
            phone_number_collection: {
                enabled: true, // Enable phone number collection
            },
            shipping_address_collection: {
                allowed_countries: [
                    "AC",
                    "AD",
                    "AE",
                    "AF",
                    "AG",
                    "AI",
                    "AL",
                    "AM",
                    "AO",
                    "AQ",
                    "AR",
                    "AT",
                    "AU",
                    "AW",
                    "AX",
                    "AZ",
                    "BA",
                    "BB",
                    "BD",
                    "BE",
                    "BF",
                    "BG",
                    "BH",
                    "BI",
                    "BJ",
                    "BL",
                    "BM",
                    "BN",
                    "BO",
                    "BQ",
                    "BR",
                    "BS",
                    "BT",
                    "BV",
                    "BW",
                    "BY",
                    "BZ",
                    "CA",
                    "CD",
                    "CF",
                    "CG",
                    "CH",
                    "CI",
                    "CK",
                    "CL",
                    "CM",
                    "CN",
                    "CO",
                    "CR",
                    "CV",
                    "CW",
                    "CY",
                    "CZ",
                    "DE",
                    "DJ",
                    "DK",
                    "DM",
                    "DO",
                    "DZ",
                    "EC",
                    "EE",
                    "EG",
                    "EH",
                    "ER",
                    "ES",
                    "ET",
                    "FI",
                    "FJ",
                    "FK",
                    "FO",
                    "FR",
                    "GA",
                    "GB",
                    "GD",
                    "GE",
                    "GF",
                    "GG",
                    "GH",
                    "GI",
                    "GL",
                    "GM",
                    "GN",
                    "GP",
                    "GQ",
                    "GR",
                    "GS",
                    "GT",
                    "GU",
                    "GW",
                    "GY",
                    "HK",
                    "HN",
                    "HR",
                    "HT",
                    "HU",
                    "ID",
                    "IE",
                    "IL",
                    "IM",
                    "IN",
                    "IO",
                    "IQ",
                    "IS",
                    "IT",
                    "JE",
                    "JM",
                    "JO",
                    "JP",
                    "KE",
                    "KG",
                    "KH",
                    "KI",
                    "KM",
                    "KN",
                    "KR",
                    "KW",
                    "KY",
                    "KZ",
                    "LA",
                    "LB",
                    "LC",
                    "LI",
                    "LK",
                    "LR",
                    "LS",
                    "LT",
                    "LU",
                    "LV",
                    "LY",
                    "MA",
                    "MC",
                    "MD",
                    "ME",
                    "MF",
                    "MG",
                    "MK",
                    "ML",
                    "MM",
                    "MN",
                    "MO",
                    "MQ",
                    "MR",
                    "MS",
                    "MT",
                    "MU",
                    "MV",
                    "MW",
                    "MX",
                    "MY",
                    "MZ",
                    "NA",
                    "NC",
                    "NE",
                    "NG",
                    "NI",
                    "NL",
                    "NO",
                    "NP",
                    "NR",
                    "NU",
                    "NZ",
                    "OM",
                    "PA",
                    "PE",
                    "PF",
                    "PG",
                    "PH",
                    "PK",
                    "PL",
                    "PM",
                    "PN",
                    "PR",
                    "PS",
                    "PT",
                    "PY",
                    "QA",
                    "RE",
                    "RO",
                    "RS",
                    "RU",
                    "RW",
                    "SA",
                    "SB",
                    "SC",
                    "SE",
                    "SG",
                    "SH",
                    "SI",
                    "SJ",
                    "SK",
                    "SL",
                    "SM",
                    "SN",
                    "SO",
                    "SR",
                    "SS",
                    "ST",
                    "SV",
                    "SX",
                    "SZ",
                    "TA",
                    "TC",
                    "TD",
                    "TF",
                    "TG",
                    "TH",
                    "TJ",
                    "TK",
                    "TL",
                    "TM",
                    "TN",
                    "TO",
                    "TR",
                    "TT",
                    "TV",
                    "TW",
                    "TZ",
                    "UA",
                    "UG",
                    "US",
                    "UY",
                    "UZ",
                    "VA",
                    "VC",
                    "VE",
                    "VG",
                    "VN",
                    "VU",
                    "WF",
                    "WS",
                    "XK",
                    "YE",
                    "YT",
                    "ZA",
                    "ZM",
                    "ZW",
                    "ZZ",
                ],
            },
            allow_promotion_codes: true,
            shipping_options: [
                {
                    shipping_rate_data: {
                        type: "fixed_amount",
                        fixed_amount: {
                            amount: 0,
                            currency: "usd",
                        },
                        display_name: "Global Shipping",
                        delivery_estimate: {
                            minimum: {
                                unit: "week",
                                value: 2,
                            },
                            maximum: {
                                unit: "week",
                                value: 3,
                            },
                        },
                    },
                },
            ],
            // shipping_options: free_shipping
            //     ? []
            //     : [
            //           {
            //               shipping_rate_data: {
            //                   type: "fixed_amount",
            //                   fixed_amount: {
            //                       amount: 1000,
            //                       currency: "usd",
            //                   },
            //                   display_name: "Global Shipping",
            //                   delivery_estimate: {
            //                       minimum: {
            //                           unit: "week",
            //                           value: 2,
            //                       },
            //                       maximum: {
            //                           unit: "week",
            //                           value: 3,
            //                       },
            //                   },
            //               },
            //           },
            //       ],
            metadata: {
                device_color: color,
            },
        });

        return new Response(JSON.stringify({ url: stripeSession.url }), {
            status: 200,
        });
    } catch (error) {
        console.log("Error creating checkout session", error);
        return new Response(
            JSON.stringify({ error: (error as Error).message }),
            {
                status: 500,
            }
        );
    }
}
