// JSON-LD Schema Generators for SEO

export interface OrganizationSchema {
  "@context": string;
  "@type": string;
  name: string;
  url: string;
  logo?: string;
  contactPoint?: {
    "@type": string;
    telephone: string;
    contactType: string;
    email?: string;
  };
  address?: {
    "@type": string;
    streetAddress: string;
    addressLocality: string;
    postalCode: string;
    addressCountry: string;
  };
  sameAs?: string[];
}

export interface ProductSchema {
  "@context": string;
  "@type": string;
  name: string;
  description: string;
  image: string[];
  brand?: {
    "@type": string;
    name: string;
  };
  offers: {
    "@type": string;
    url: string;
    priceCurrency: string;
    price: string;
    availability: string;
    itemCondition: string;
  };
  aggregateRating?: {
    "@type": string;
    ratingValue: string;
    reviewCount: string;
  };
  sku?: string;
  gtin?: string;
  mpn?: string;
}

export interface BreadcrumbSchema {
  "@context": string;
  "@type": string;
  itemListElement: Array<{
    "@type": string;
    position: number;
    name: string;
    item: string;
  }>;
}

// Generate Organization Schema
export function generateOrganizationSchema(settings: any): OrganizationSchema {
  const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://yoursite.com";
  
  return {
    "@context": "https://schema.org",
    "@type": "Organization",
    name: settings?.company_name || "Server Zone Computer",
    url: siteUrl,
    logo: settings?.logo_url ? `${siteUrl}${settings.logo_url}` : undefined,
    contactPoint: settings?.phone
      ? {
          "@type": "ContactPoint",
          telephone: settings.phone,
          contactType: "customer service",
          email: settings.support_email,
        }
      : undefined,
    address: settings?.address
      ? {
          "@type": "PostalAddress",
          streetAddress: settings.address.street || "",
          addressLocality: settings.address.city || "",
          postalCode: settings.address.zip || "",
          addressCountry: settings.address.country || "",
        }
      : undefined,
    sameAs: settings?.social_media
      ? Object.values(settings.social_media).filter(Boolean) as string[]
      : undefined,
  };
}

// Generate Product Schema
export function generateProductSchema(product: any, settings?: any): ProductSchema {
  const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://yoursite.com";
  const slug = product.slug || product._id;
  const productUrl = `${siteUrl}/product/${slug}`;
  
  return {
    "@context": "https://schema.org",
    "@type": "Product",
    name: product.title,
    description: product.description || product.shortDescription || "",
    image: product.images && product.images.length > 0 
      ? product.images.map((img: string) => img.startsWith("http") ? img : `${siteUrl}${img}`)
      : product.photoUrl 
        ? (product.photoUrl.startsWith("http") ? product.photoUrl : `${siteUrl}${product.photoUrl}`)
        : [],
    brand: product.brand
      ? {
          "@type": "Brand",
          name: product.brand,
        }
      : undefined,
    offers: {
      "@type": "Offer",
      url: productUrl,
      priceCurrency: product.currency || settings?.currency || "AED",
      price: product.price?.toString() || "0",
      availability: product.availability === "out of stock" 
        ? "https://schema.org/OutOfStock"
        : "https://schema.org/InStock",
      itemCondition: product.condition 
        ? `https://schema.org/${product.condition.charAt(0).toUpperCase() + product.condition.slice(1)}Condition`
        : "https://schema.org/NewCondition",
    },
    aggregateRating: {
      "@type": "AggregateRating",
      ratingValue: "4.5",
      reviewCount: "10",
    },
    sku: product.sku,
    gtin: product.gtin,
    mpn: product.mpn,
  };
}

// Generate Breadcrumb Schema
export function generateBreadcrumbSchema(items: Array<{ name: string; url: string }>): BreadcrumbSchema {
  const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://yoursite.com";
  
  return {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    itemListElement: items.map((item, index) => ({
      "@type": "ListItem",
      position: index + 1,
      name: item.name,
      item: item.url.startsWith("http") ? item.url : `${siteUrl}${item.url}`,
    })),
  };
}

// Generate Website Schema
export function generateWebsiteSchema(settings?: any) {
  const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://yoursite.com";
  
  return {
    "@context": "https://schema.org",
    "@type": "WebSite",
    name: settings?.company_name || "Server Zone Computer",
    url: siteUrl,
    potentialAction: {
      "@type": "SearchAction",
      target: {
        "@type": "EntryPoint",
        urlTemplate: `${siteUrl}/search?q={search_term_string}`,
      },
      "query-input": "required name=search_term_string",
    },
  };
}

