import { Head } from '@inertiajs/react';

interface SEOHeadProps {
    title?: string;
    description?: string;
    keywords?: string[];
    image?: string;
    type?: 'website' | 'article' | 'profile';
    author?: string;
    publishedTime?: string;
    modifiedTime?: string;
    section?: string;
    tags?: string[];
    jsonLd?: object;
}

/**
 * SEOHead Component
 *
 * Componente reutilizable para gestionar meta tags SEO dinámicos en cada página.
 * Incluye soporte para Open Graph, Twitter Cards y datos estructurados JSON-LD.
 *
 * @example
 * <SEOHead
 *   title="Mapa de Proyectos"
 *   description="Explora proyectos de innovación educativa"
 *   keywords={['innovación', 'educación', 'Colombia']}
 * />
 */
export default function SEOHead({
    title,
    description,
    keywords = [],
    image,
    type = 'website',
    author,
    publishedTime,
    modifiedTime,
    section,
    tags = [],
    jsonLd,
}: SEOHeadProps) {
    const appName = 'MIRATE';
    const baseUrl = window.location.origin;
    const currentUrl = window.location.href;

    const defaultDescription = 'MIRATE - Mapa Interactivo de Innovación Educativa. Plataforma digital que visibiliza proyectos de investigación con innovación pedagógica, didáctica y curricular en Colombia y Latinoamérica.';
    const defaultKeywords = [
        'innovación educativa',
        'investigación pedagógica',
        'proyectos educativos',
        'mapa interactivo',
        'educación Colombia',
        'Universidad de Córdoba',
        'MIRATE',
    ];
    const defaultImage = `${baseUrl}/assets/img/logo_mirate.png`;

    const finalTitle = title ? `${title} | ${appName}` : appName;
    const finalDescription = description || defaultDescription;
    const finalKeywords = [...new Set([...keywords, ...defaultKeywords])].join(', ');
    const finalImage = image || defaultImage;

    return (
        <Head>
            {/* Basic Meta Tags */}
            <title>{finalTitle}</title>
            <meta name="description" content={finalDescription} />
            <meta name="keywords" content={finalKeywords} />
            {author && <meta name="author" content={author} />}

            {/* Open Graph / Facebook */}
            <meta property="og:type" content={type} />
            <meta property="og:url" content={currentUrl} />
            <meta property="og:title" content={finalTitle} />
            <meta property="og:description" content={finalDescription} />
            <meta property="og:image" content={finalImage} />
            <meta property="og:site_name" content={appName} />
            <meta property="og:locale" content="es_CO" />

            {/* Article specific OG tags */}
            {type === 'article' && (
                <>
                    {publishedTime && <meta property="article:published_time" content={publishedTime} />}
                    {modifiedTime && <meta property="article:modified_time" content={modifiedTime} />}
                    {author && <meta property="article:author" content={author} />}
                    {section && <meta property="article:section" content={section} />}
                    {tags.map((tag, index) => (
                        <meta key={index} property="article:tag" content={tag} />
                    ))}
                </>
            )}

            {/* Twitter Card */}
            <meta name="twitter:card" content="summary_large_image" />
            <meta name="twitter:url" content={currentUrl} />
            <meta name="twitter:title" content={finalTitle} />
            <meta name="twitter:description" content={finalDescription} />
            <meta name="twitter:image" content={finalImage} />

            {/* Canonical URL */}
            <link rel="canonical" href={currentUrl} />

            {/* JSON-LD Structured Data */}
            {jsonLd && (
                <script type="application/ld+json">
                    {JSON.stringify(jsonLd)}
                </script>
            )}
        </Head>
    );
}
