import { redirect } from '@sveltejs/kit';
import prisma from '$lib/server/prisma';
import type { LayoutServerLoad } from './$types';
import { getActivePromotions, selectBestPromotion } from '$lib/server/promotionPricing';

export const load = (async ({ locals: { user }, url }) => {
	if (!url.pathname.startsWith('/product') && !url.pathname.startsWith('/subscription') && !user)
		throw redirect(303, '/login');

	let isSubscribed = false;

	if (user) {
		// Check active subscriptions
		const activeSubscription = await prisma.userSubscription.findFirst({
			where: {
				userId: user.id,
				status: 'ACTIVE',
				isActive: true,
				endsAt: { gte: new Date() } // still valid
			}
		});

		isSubscribed = !!activeSubscription;

		// Load the user's cart
		const cart = await prisma.cart.findUnique({
			where: { userId: user.id },
			include: {
				CartItem: {
					include: {
						product: {
							include: {
								Image: { select: { url: true } },
								categories: { select: { id: true } }
							}
						}
					}
				}
			}
		});

		if (!cart) return { cartItems: [], isSubscribed };

		// Apply promotions
		const productIds = cart.CartItem.map((ci) => ci.productId || ci.product.id).filter(Boolean);
		const categoryIds = Array.from(new Set(cart.CartItem.flatMap((ci) => ci.product.categories.map((c) => c.id))));
		const activePromotions = await getActivePromotions(new Date(), { productIds, categoryIds });
		const enriched = cart.CartItem.map((ci) => {
			const categoryIds = ci.product.categories.map((c) => c.id);
			const applied = selectBestPromotion(ci.product.price, ci.product.id, categoryIds, activePromotions);
			return applied
				? {
						...ci,
						product: {
							...ci.product,
							discountedPrice: applied.finalUnitPrice,
							appliedPromotion: {
								id: applied.promotionId,
								name: applied.name,
								discountType: applied.discountType,
								discountValue: applied.discountValue
							}
						}
					}
				: ci;
		});

		return { cartItems: enriched, isSubscribed };
	}

	return { cartItems: [], isSubscribed: false };
}) satisfies LayoutServerLoad;
