import type { Metadata } from 'next';
import { headers } from 'next/headers';
import { loadStoreConfig } from '@/lib/storeConfig';
import type { StoreConfig } from '@/components/store/config/defaultStoreConfig';

/** URL base del tenant, derivada del Host de la request. */
export async function getStoreBaseUrl(): Promise<string> {
	const hdrs = await headers();
	const host = hdrs.get('host') ?? '';
	// Detrás de proxy/CDN el protocolo real viene en x-forwarded-proto.
	const proto = hdrs.get('x-forwarded-proto') ?? (host.startsWith('localhost') ? 'http' : 'https');
	return `${proto}://${host}`;
}

/**
 * Una tienda sólo debe indexarse si la config se resolvió contra un tenant real
 * y está publicada. Si `loadStoreConfig()` cayó al fallback (tienda en borrador,
 * pausada, subdominio inexistente o backend caído), lo que se renderiza es el
 * diseño por defecto — Google no debe levantarlo como si fuera el comercio.
 */
export function isIndexable(config: StoreConfig): boolean {
	return config.source === 'tenant' && config.status === 'published';
}

/** Metadata SEO del tenant: título, descripción, OpenGraph, canonical y robots. */
export async function buildStoreMetadata(): Promise<Metadata> {
	const config = await loadStoreConfig();
	const base = await getStoreBaseUrl();

	const nombre = config.identity?.name?.trim() || 'Tienda online';
	const slogan = config.identity?.slogan?.trim();
	const descripcion = slogan || `Comprá online en ${nombre}. Envíos y retiro en tienda.`;
	const indexable = isIndexable(config);
	const favicon = config.identity?.faviconUrl?.trim();

	return {
		metadataBase: new URL(base),
		title: {
			default: nombre,
			template: `%s · ${nombre}`
		},
		description: descripcion,
		applicationName: nombre,
		...(favicon ? { icons: { icon: favicon, shortcut: favicon, apple: favicon } } : {}),
		referrer: 'origin-when-cross-origin',
		robots: indexable
			? { index: true, follow: true }
			: { index: false, follow: false, nocache: true },
		alternates: { canonical: base },
		openGraph: {
			type: 'website',
			siteName: nombre,
			title: nombre,
			description: descripcion,
			url: base,
			locale: 'es_PY'
		},
		twitter: {
			card: 'summary_large_image',
			title: nombre,
			description: descripcion
		}
	};
}
