export type RuleCategory =
  | "security"
  | "duplicate_content"
  | "technical"
  | "custom";

export type RuleTier = "free" | "standard" | "pro";

export interface SerpPreview {
  siteTitle: string;
  siteUrl: string;
  pageTitle: string;
  pageDescription: string;
  faviconLetter: string;
  faviconColor: string;
}

export interface RuleDefinition {
  key: string;
  category: RuleCategory;
  priority: number;
  label: string;
  description: string;
  robotsValue: string;
  hasCanonical: boolean;
  hasCustomValue: boolean;
  customValueLabel?: string;
  customValuePlaceholder?: string;
  defaultEnabled: boolean;
  isFree: boolean;
  tier: RuleTier;
  googleCheckUrl?: string;
  serpPreview?: SerpPreview;
}

export const RULE_CATEGORIES: {
  key: RuleCategory;
  label: string;
  description: string;
}[] = [
  {
    key: "security",
    label: "Sécurité",
    description: "Pages sensibles qui ne doivent jamais être indexées",
  },
  {
    key: "duplicate_content",
    label: "Contenu Dupliqué",
    description:
      "URLs générant du contenu dupliqué nuisible au référencement",
  },
  {
    key: "technical",
    label: "Technique",
    description: "URLs techniques générées par Shopify",
  },
  {
    key: "custom",
    label: "Personnalisé",
    description: "Règles personnalisées pour vos besoins spécifiques",
  },
];

export const TAB_GROUPS = [
  {
    key: "native",
    label: "Désindexation pages natives",
    categories: ["security", "duplicate_content", "technical"] as RuleCategory[],
  },
  {
    key: "custom",
    label: "Désindexation personnalisée",
    categories: ["custom"] as RuleCategory[],
  },
];

export const RULES: RuleDefinition[] = [
  // === SECURITY (P1-10) ===
  {
    key: "noindex_nofollow_customer_login_page",
    category: "security",
    priority: 1,
    label: "Page connexion",
    description:
      "Gère l'indexation de la page de connexion client `/account/login`. Il est recommandé de la mettre en 'noindex'.",
    robotsValue: "noindex,nofollow",
    hasCanonical: false,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}/account/login",
    serpPreview: {
      siteTitle: "respire",
      siteUrl: "https://www.respire.co › fr-be › account › register",
      pageTitle: "Creer un compte",
      pageDescription:
        "Rejoignez-nous ... Chez Respire, nous developpons des soins naturels haute performance et assurons a la fois une efficacite et une sensorialite.",
      faviconLetter: "R",
      faviconColor: "#6366f1",
    },
  },
  {
    key: "noindex_nofollow_customer_account_page",
    category: "security",
    priority: 2,
    label: "Page compte",
    description:
      "Controle l'indexation des pages du compte client (historique, adresses). Doit etre en 'noindex' pour la confidentialite et eviter le contenu pauvre.",
    robotsValue: "noindex,nofollow",
    hasCanonical: false,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}+(inurl:/account+OR+inurl:/customer_authentication/)",
    serpPreview: {
      siteTitle: "sephora",
      siteUrl: "https://www.sephora.fr › account",
      pageTitle: "Mon compte - Sephora",
      pageDescription:
        "Gerez vos informations personnelles, vos commandes et vos points fidelite.",
      faviconLetter: "S",
      faviconColor: "#000000",
    },
  },
  {
    key: "noindex_nofollow_cart_page",
    category: "security",
    priority: 3,
    label: "Page panier",
    description:
      "Gère l'indexation de la page panier `/cart`. Doit toujours etre en 'noindex' car son contenu est dynamique et unique a l'utilisateur.",
    robotsValue: "noindex,nofollow",
    hasCanonical: false,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}/cart",
    serpPreview: {
      siteTitle: "gymshark",
      siteUrl: "https://www.gymshark.com › cart",
      pageTitle: "Votre panier - Gymshark",
      pageDescription:
        "Consultez les articles dans votre panier et passez a la caisse.",
      faviconLetter: "G",
      faviconColor: "#1e3a5f",
    },
  },
  {
    key: "noindex_nofollow_checkout_page",
    category: "security",
    priority: 4,
    label: "Page checkout",
    description:
      "Bloque l'indexation des pages de paiement. Essentiel pour la securite et pour ne pas indexer des pages transactionnelles.",
    robotsValue: "noindex,nofollow",
    hasCanonical: false,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}/checkout",
    serpPreview: {
      siteTitle: "allbirds",
      siteUrl: "https://www.allbirds.com › checkout",
      pageTitle: "Checkout - Allbirds",
      pageDescription:
        "Finalisez votre commande en toute securite.",
      faviconLetter: "A",
      faviconColor: "#2d6a4f",
    },
  },

  // === DUPLICATE CONTENT (P11-20) ===
  {
    key: "noindex_nofollow_collection_all",
    category: "duplicate_content",
    priority: 0,
    label: 'Collection "All"',
    description:
      "Gère l'indexation de la collection par défaut `/collections/all` qui affiche tous les produits. Peut etre désactivée pour prioriser des collections plus spécifiques.",
    robotsValue: "noindex,nofollow",
    hasCanonical: false,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: true,
    tier: "free",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}/collections/all",
    serpPreview: {
      siteTitle: "tupperware france",
      siteUrl: "https://tupperware-eu.com › collections › all",
      pageTitle: "Produits \u2013 TUPPERWARE FRANCE",
      pageDescription:
        "Filtre \u00b7 Sec - Placard 48 \u00b7 Refrigerateur 19 \u00b7 Congelateur 7 \u00b7 Patisserie 20 \u00b7 Ustensiles 28 \u00b7 Bols 6 \u00b7 Couteaux 6 \u00b7 Robot 7",
      faviconLetter: "T",
      faviconColor: "#16a34a",
    },
  },
  {
    key: "noindex_tagged_collections",
    category: "duplicate_content",
    priority: 12,
    label: "Collections tagguées",
    description:
      "Gère l'indexation des collections filtrées par des tags (ex: `/collections/nom/tag`). Evite le contenu duplique en n'indexant que la page principale de la collection.",
    robotsValue: "noindex",
    hasCanonical: true,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}+inurl:/tagged/",
    serpPreview: {
      siteTitle: "asos",
      siteUrl: "https://www.asos.com › collections › robes › ete",
      pageTitle: "Robes d'ete - ASOS",
      pageDescription:
        "Decouvrez notre selection de robes d'ete. Livraison gratuite des 25\u20ac d'achat.",
      faviconLetter: "A",
      faviconColor: "#000000",
    },
  },
  {
    key: "noindex_tagged_blogs",
    category: "duplicate_content",
    priority: 13,
    label: "Blogs taggués",
    description:
      "Controle l'indexation des pages de blog filtrées par tags. Permet d'eviter que le meme article apparaisse sur de multiples pages de listing indexees.",
    robotsValue: "noindex",
    hasCanonical: true,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}+inurl:/blogs/*/tagged/",
    serpPreview: {
      siteTitle: "shopify blog",
      siteUrl: "https://www.example.com › blogs › news › tagged › promo",
      pageTitle: "Articles taggués promo - Blog",
      pageDescription:
        "Tous les articles du blog filtres par le tag promo.",
      faviconLetter: "B",
      faviconColor: "#059669",
    },
  },
  {
    key: "noindex_vendor_urls",
    category: "duplicate_content",
    priority: 14,
    label: "Collections Vendors",
    description:
      "Gère l'indexation des collections par vendeur/marque (ex: `/collections/vendors?q=NomDuFournisseur`). Vient du tag produit 'Vendor'.",
    robotsValue: "noindex,follow",
    hasCanonical: true,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}+inurl:/collections/vendors",
    serpPreview: {
      siteTitle: "decathlon",
      siteUrl: "https://www.decathlon.fr › collections › vendors",
      pageTitle: "Tous les fournisseurs - Decathlon",
      pageDescription:
        "Liste de tous les fournisseurs et marques disponibles sur notre boutique.",
      faviconLetter: "D",
      faviconColor: "#0066cc",
    },
  },
  {
    key: "noindex_collection_urls_with_sort_parameters",
    category: "duplicate_content",
    priority: 15,
    label: "Collections triees 'sort_by'",
    description:
      "Bloque l'indexation des URLs de collections contenant un paramètre de tri (ex: `?sort_by=price-ascending`) pour eviter les doublons avec la collection principale.",
    robotsValue: "noindex",
    hasCanonical: true,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}+inurl:sort_by",
    serpPreview: {
      siteTitle: "le slip francais",
      siteUrl: "https://www.leslipfrancais.fr › collections › boxers?sort_by=price",
      pageTitle: "Boxers homme - Le Slip Francais",
      pageDescription:
        "Decouvrez nos boxers homme fabriques en France. Coton bio, confort et style.",
      faviconLetter: "L",
      faviconColor: "#dc2626",
    },
  },
  {
    key: "noindex_search_urls",
    category: "duplicate_content",
    priority: 16,
    label: "Pages recherche 'search'",
    description:
      "Bloque l'indexation des pages de résultats de la recherche interne de votre site. Ces pages sont considerees comme du contenu de faible qualite par Google.",
    robotsValue: "noindex",
    hasCanonical: true,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}/search",
    serpPreview: {
      siteTitle: "maisons du monde",
      siteUrl: "https://www.maisonsdumonde.com › search?q=canape",
      pageTitle: 'Resultats de recherche pour "canape"',
      pageDescription:
        "156 résultats pour votre recherche. Decouvrez notre selection de canapes et meubles.",
      faviconLetter: "M",
      faviconColor: "#b45309",
    },
  },

  // === TECHNICAL (P21-30) ===
  {
    key: "noindex_product_urls_variant_parameter",
    category: "technical",
    priority: 21,
    label: "Paramètre variantes 'variant'",
    description:
      "Gère les URLs avec le paramètre `?variant=...` en utilisant une balise canonique vers la page produit principale pour eviter de dupliquer les fiches produits.",
    robotsValue: "noindex",
    hasCanonical: false,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}+inurl:variant=",
    serpPreview: {
      siteTitle: "nike",
      siteUrl: "https://www.nike.com › products › air-max?variant=42",
      pageTitle: "Nike Air Max 90 - Taille 42",
      pageDescription:
        "Decouvrez la Nike Air Max 90 dans votre taille. Livraison gratuite pour les membres.",
      faviconLetter: "N",
      faviconColor: "#000000",
    },
  },
  {
    key: "noindex_urls_with_product_recommendations_parameters",
    category: "technical",
    priority: 22,
    label: "Paramètre recommandations 'pr_prod_strat'",
    description:
      "Exclut de l'indexation les URLs contenant des paramètres de suivi pour les recommandations de produits, qui creent des URLs dupliquees.",
    robotsValue: "noindex",
    hasCanonical: false,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}+inurl:pr_prod_strat",
    serpPreview: {
      siteTitle: "glossier",
      siteUrl: "https://www.glossier.com › products › serum?pr_prod_strat=copurchase",
      pageTitle: "Super Bounce Serum - Glossier",
      pageDescription:
        "Hyaluronic acid + vitamin B5 serum. Plumps and hydrates skin.",
      faviconLetter: "G",
      faviconColor: "#f472b6",
    },
  },
  {
    key: "noindex_wpm_and_sandbox",
    category: "technical",
    priority: 23,
    label: "URLs techniques 'wpm, sandbox'",
    description:
      "Bloque l'indexation des URLs techniques utilisees par des applications tierces ou des scripts de suivi (pixels), qui ne contiennent aucun contenu pertinent pour l'utilisateur.",
    robotsValue: "noindex",
    hasCanonical: false,
    hasCustomValue: false,
    defaultEnabled: false,
    isFree: false,
    tier: "standard",
    googleCheckUrl: "https://www.google.fr/search?q=site:{domain}+(inurl:web-pixels-manager+OR+inurl:/wpm+OR+inurl:sandbox)",
    serpPreview: {
      siteTitle: "shopify store",
      siteUrl: "https://example.myshopify.com › web-pixels-manager › sandbox",
      pageTitle: "Web Pixels Manager",
      pageDescription:
        "Page technique générée automatiquement par Shopify pour le tracking.",
      faviconLetter: "S",
      faviconColor: "#7c3aed",
    },
  },

  // === CUSTOM (P31-40) ===
  {
    key: "noindex_handles",
    category: "custom",
    priority: 31,
    label: "Handles personnalisés",
    description:
      "Permet de desindexer des pages specifiques en se basant sur leur \"handle\" (partie finale de l'url). Ideal pour exclure des pages comme les mentions legales.",
    robotsValue: "noindex",
    hasCanonical: false,
    hasCustomValue: true,
    customValueLabel: "Handles à bloquer",
    customValuePlaceholder:
      "contact, mentions-legales, politique-de-confidentialite",
    defaultEnabled: false,
    isFree: false,
    tier: "pro",
  },
  {
    key: "noindex_specific_url",
    category: "custom",
    priority: 33,
    label: "Chemin d'URL 'path'",
    description:
      "Permet de desindexer toutes les URLs qui contiennent un segment de chemin (path) specifique. Par exemple, en ajoutant `/archives/`, toutes les URLs comme `monsite.com/blog/archives/article` seraient desindexees.",
    robotsValue: "noindex",
    hasCanonical: false,
    hasCustomValue: true,
    customValueLabel: "Chemins d'URL à bloquer",
    customValuePlaceholder:
      "/pages/contact-us, /pages/terms, /blogs/news/old-post",
    defaultEnabled: false,
    isFree: false,
    tier: "pro",
  },
  {
    key: "noindex_custom_url_parameters",
    category: "custom",
    priority: 32,
    label: "Paramètres personnalisés",
    description:
      "Offre la possibilite de desindexer toute URL contenant des paramètres specifiques que vous definissez. Très utile pour les paramètres de suivi marketing, d'affiliation ou de personnalisation.",
    robotsValue: "noindex",
    hasCanonical: false,
    hasCustomValue: true,
    customValueLabel: "Paramètres à bloquer",
    customValuePlaceholder: "refSrc, nosto, utm_source",
    defaultEnabled: false,
    isFree: false,
    tier: "pro",
  },
];

export function getRulesByCategory(
  category: RuleCategory,
): RuleDefinition[] {
  return RULES.filter((r) => r.category === category).sort(
    (a, b) => a.priority - b.priority,
  );
}

export function getRulesByTabGroup(tabKey: string): RuleDefinition[] {
  const group = TAB_GROUPS.find((g) => g.key === tabKey);
  if (!group) return [];
  return RULES.filter((r) => group.categories.includes(r.category)).sort(
    (a, b) => a.priority - b.priority,
  );
}

export function getRuleByKey(key: string): RuleDefinition | undefined {
  return RULES.find((r) => r.key === key);
}
