import type { LoaderFunctionArgs } from "react-router";
import { Outlet } from "react-router";
import { AppProvider } from "@shopify/polaris";
import polarisTranslations from "@shopify/polaris/locales/en.json";
import { registerShop } from "../services/shop.server";
import { resolveShopDomainFromRequest } from "../lib/security/tenant-context";
import prisma from "../db.server";

export const headers = () => {
  return {
    "X-Frame-Options": "ALLOWALL",
    "Content-Security-Policy": "frame-ancestors https://admin.shopify.com https://*.myshopify.com;",
  };
};

export const loader = async ({ request }: LoaderFunctionArgs) => {
  const shopDomain = resolveShopDomainFromRequest(request);

  try {
    const shop = await registerShop({
      shopifyDomain: shopDomain,
      accessToken: "shpss_sample_token",
      scopes: "read_products,read_content",
    });

    const settings = await prisma.chatbotSettings.findUnique({
      where: { shopId: shop.id },
    });

    return {
      apiKey: process.env.SHOPIFY_API_KEY || "",
      shop: shop.shopifyDomain,
      storeId: shop.id,
      botName: settings?.botName || "ConverseCart Assistant",
    };
  } catch (e) {
    return {
      apiKey: process.env.SHOPIFY_API_KEY || "",
      shop: shopDomain,
      storeId: "local_dev_store",
      botName: "ConverseCart Assistant",
    };
  }
};

export default function App() {
  return (
    <AppProvider i18n={polarisTranslations}>
      <Outlet />
    </AppProvider>
  );
}
