export interface BreadcrumbItem {
  name: string;
  url: string;
}

export interface BlogPost {
  title: string;
  description: string;
  slug: string;
  author: string;
  authorUrl: string;
  datePublished: string;
  dateModified: string;
  image: string;
}

export interface FAQItem {
  question: string;
  answer: string;
}

export interface ProductOffer {
  name: string;
  price: string;
  priceCurrency: string;
  availability: string;
  url: string;
}

export interface HowToStep {
  name: string;
  text: string;
  url?: string;
}

export interface HowToTask {
  name: string;
  description: string;
  steps: HowToStep[];
  totalTime?: string;
}

export function organizationSchema() {
  return {
    '@context': 'https://schema.org',
    '@type': 'Organization',
    '@id': 'https://www.qrmaster.net/#organization',
    name: 'QR Master',
    alternateName: 'QRMaster',
    url: 'https://www.qrmaster.net',
    logo: {
      '@type': 'ImageObject',
      url: 'https://www.qrmaster.net/static/og-image.png',
      width: 1200,
      height: 630,
    },
    image: 'https://www.qrmaster.net/static/og-image.png',
    sameAs: [
      'https://twitter.com/qrmaster',
    ],
    contactPoint: {
      '@type': 'ContactPoint',
      contactType: 'Customer Support',
      email: 'support@qrmaster.net',
      availableLanguage: ['English', 'German'],
    },
    description: 'B2B SaaS platform for dynamic QR code generation with analytics, branding, and bulk generation for enterprise marketing campaigns.',
    slogan: 'Dynamic QR codes that work smarter',
    foundingDate: '2025',
    areaServed: 'Worldwide',
    serviceType: 'Software as a Service',
    priceRange: '$0 - $29',
    knowsAbout: [
      'QR Code Generation',
      'Marketing Analytics',
      'Campaign Tracking',
      'Dynamic QR Codes',
      'Bulk QR Generation',
    ],
    hasOfferCatalog: {
      '@type': 'OfferCatalog',
      name: 'QR Master Plans',
      itemListElement: [
        {
          '@type': 'Offer',
          itemOffered: {
            '@type': 'SoftwareApplication',
            name: 'QR Master Free',
            applicationCategory: 'BusinessApplication',
            operatingSystem: 'Web Browser',
          },
        },
        {
          '@type': 'Offer',
          itemOffered: {
            '@type': 'SoftwareApplication',
            name: 'QR Master Pro',
            applicationCategory: 'BusinessApplication',
            operatingSystem: 'Web Browser',
          },
        },
      ],
    },
    inLanguage: 'en',
    mainEntityOfPage: 'https://www.qrmaster.net',
  };
}

export function websiteSchema() {
  return {
    '@context': 'https://schema.org',
    '@type': 'WebSite',
    '@id': 'https://www.qrmaster.net/#website',
    name: 'QR Master',
    url: 'https://www.qrmaster.net',
    inLanguage: 'en',
    mainEntityOfPage: 'https://www.qrmaster.net',
    publisher: {
      '@id': 'https://www.qrmaster.net/#organization',
    },
    potentialAction: {
      '@type': 'SearchAction',
      target: {
        '@type': 'EntryPoint',
        urlTemplate: 'https://www.qrmaster.net/blog?q={search_term_string}',
      },
      'query-input': 'required name=search_term_string',
    },
  };
}

export function breadcrumbSchema(items: BreadcrumbItem[]) {
  return {
    '@context': 'https://schema.org',
    '@type': 'BreadcrumbList',
    '@id': `https://www.qrmaster.net${items[items.length - 1]?.url}#breadcrumb`,
    inLanguage: 'en',
    mainEntityOfPage: `https://www.qrmaster.net${items[items.length - 1]?.url}`,
    itemListElement: items.map((item, index) => ({
      '@type': 'ListItem',
      position: index + 1,
      name: item.name,
      item: `https://www.qrmaster.net${item.url}`,
    })),
  };
}

export function blogPostingSchema(post: BlogPost) {
  return {
    '@context': 'https://schema.org',
    '@type': 'BlogPosting',
    '@id': `https://www.qrmaster.net/blog/${post.slug}#article`,
    headline: post.title,
    description: post.description,
    image: post.image,
    datePublished: post.datePublished,
    dateModified: post.dateModified,
    inLanguage: 'en',
    mainEntityOfPage: `https://www.qrmaster.net/blog/${post.slug}`,
    author: {
      '@type': 'Person',
      name: post.author,
      url: post.authorUrl,
    },
    publisher: {
      '@type': 'Organization',
      name: 'QR Master',
      url: 'https://www.qrmaster.net',
      logo: {
        '@type': 'ImageObject',
        url: 'https://www.qrmaster.net/static/og-image.png',
        width: 1200,
        height: 630,
      },
    },
    isPartOf: {
      '@type': 'Blog',
      '@id': 'https://www.qrmaster.net/blog#blog',
      name: 'QR Master Blog',
      url: 'https://www.qrmaster.net/blog',
    },
  };
}

export function faqPageSchema(faqs: FAQItem[]) {
  return {
    '@context': 'https://schema.org',
    '@type': 'FAQPage',
    '@id': 'https://www.qrmaster.net/faq#faqpage',
    inLanguage: 'en',
    mainEntityOfPage: 'https://www.qrmaster.net/faq',
    mainEntity: faqs.map((faq) => ({
      '@type': 'Question',
      name: faq.question,
      acceptedAnswer: {
        '@type': 'Answer',
        text: faq.answer,
      },
    })),
  };
}

export function productSchema(product: { name: string; description: string; offers: ProductOffer[] }) {
  return {
    '@context': 'https://schema.org',
    '@type': 'Product',
    '@id': 'https://www.qrmaster.net/pricing#product',
    name: product.name,
    description: product.description,
    inLanguage: 'en',
    mainEntityOfPage: 'https://www.qrmaster.net/pricing',
    brand: {
      '@type': 'Organization',
      name: 'QR Master',
    },
    offers: product.offers.map((offer) => ({
      '@type': 'Offer',
      name: offer.name,
      price: offer.price,
      priceCurrency: offer.priceCurrency,
      availability: offer.availability,
      url: offer.url,
    })),
  };
}

export function howToSchema(task: HowToTask) {
  return {
    '@context': 'https://schema.org',
    '@type': 'HowTo',
    '@id': `https://www.qrmaster.net/blog/${task.name.toLowerCase().replace(/\s+/g, '-')}#howto`,
    name: task.name,
    description: task.description,
    inLanguage: 'en',
    mainEntityOfPage: `https://www.qrmaster.net/blog/${task.name.toLowerCase().replace(/\s+/g, '-')}`,
    totalTime: task.totalTime || 'PT5M',
    step: task.steps.map((step, index) => ({
      '@type': 'HowToStep',
      position: index + 1,
      name: step.name,
      text: step.text,
      url: step.url,
    })),
  };
}
