package render

import (
	"html/template"
	"strings"
)

type staticPageDef struct {
	path        string
	title       string
	description string
	noIndex     bool
	ogType      string
	jsonLD      func(siteURL string) template.HTML
}

var staticPageDefs = map[string]staticPageDef{
	"pricing": {
		path:        "/pricing",
		title:       "LeadB2B | Planos de prospecção ativa",
		description: "Planos Free e Pro para prospecção ativa com Kanban. Até 20 leads ativos no Free e 100 no Pro. Sistema de vendas guiado, não venda de listas.",
		ogType:      "website",
	},
	"faq": {
		path:        "/faq",
		title:       "LeadB2B | Perguntas frequentes",
		description: "Perguntas frequentes sobre prospecção ativa, funil de vendas, Kanban, planos Free e Pro, LGPD e dados da Receita Federal no LeadB2B.",
		ogType:      "website",
		jsonLD:      SiteFAQStructuredData,
	},
	"contact": {
		path:        "/contact",
		title:       "LeadB2B | Contato",
		description: "Entre em contato com a equipe LeadB2B para dúvidas sobre planos, prospecção B2B e consulta de empresas por CNPJ e CNAE.",
		ogType:      "website",
	},
	"termos": {
		path:        "/termos",
		title:       "LeadB2B | Termos de uso",
		description: "Termos de uso da plataforma LeadB2B de prospecção B2B e consulta de dados de empresas.",
		ogType:      "website",
	},
	"privacidade": {
		path:        "/privacidade",
		title:       "LeadB2B | Política de privacidade",
		description: "Política de privacidade e tratamento de dados da LeadB2B em conformidade com a LGPD.",
		ogType:      "website",
	},
	"login": {
		path:        "/login",
		title:       "LeadB2B | Entrar",
		description: "Acesse sua conta LeadB2B para prospecção B2B e consulta de empresas.",
		noIndex:     true,
		ogType:      "website",
	},
	"cadastro": {
		path:        "/cadastro",
		title:       "LeadB2B | Criar conta — Comece grátis",
		description: "Crie sua conta gratuita e comece sua prospecção ativa. Kanban, funil de vendas e até 20 leads ativos no plano Free.",
		noIndex:     true,
		ogType:      "website",
	},
	"blog": {
		path:        "/blog",
		title:       "LeadB2B | Blog",
		description: "Artigos sobre prospecção B2B, segmentação por CNAE, exportação para CRM e estratégias de vendas B2B no Brasil.",
		ogType:      "website",
	},
	"blog-como-encontrar-leads-b2b": {
		path:        "/blog/como-encontrar-leads-b2b",
		title:       "LeadB2B | Como encontrar leads B2B qualificados em 2026",
		description: "Guia prático para encontrar leads B2B qualificados por CNAE, UF e município usando dados oficiais da Receita Federal.",
		ogType:      "article",
		jsonLD: func(siteURL string) template.HTML {
			return BlogPostingStructuredData(siteURL, "/blog/como-encontrar-leads-b2b",
				"Como encontrar leads B2B qualificados em 2026",
				"Guia prático para encontrar leads B2B qualificados por CNAE, UF e município.",
				"2026-03-15")
		},
	},
	"blog-segmentacao-por-cnae": {
		path:        "/blog/segmentacao-por-cnae",
		title:       "LeadB2B | Segmentação por CNAE: guia prático para vendas",
		description: "Como usar códigos CNAE para segmentar empresas e montar listas de prospecção B2B por setor econômico.",
		ogType:      "article",
		jsonLD: func(siteURL string) template.HTML {
			return BlogPostingStructuredData(siteURL, "/blog/segmentacao-por-cnae",
				"Segmentação por CNAE: guia prático para vendas",
				"Como usar CNAE para segmentar empresas na prospecção B2B.",
				"2026-04-28")
		},
	},
	"blog-exportar-lista-empresas-crm": {
		path:        "/blog/exportar-lista-empresas-crm",
		title:       "LeadB2B | Como exportar listas de empresas para o CRM",
		description: "Passo a passo para exportar listas de empresas B2B do LeadB2B para seu CRM e acelerar a prospecção.",
		ogType:      "article",
		jsonLD: func(siteURL string) template.HTML {
			return BlogPostingStructuredData(siteURL, "/blog/exportar-lista-empresas-crm",
				"Como exportar listas de empresas para o CRM",
				"Exportação de listas B2B para CRM a partir de dados da Receita Federal.",
				"2026-05-10")
		},
	},
	"blog-estrategias-prospeccao-ativa": {
		path:        "/blog/estrategias-prospeccao-ativa",
		title:       "LeadB2B | 5 estratégias de prospecção ativa que funcionam",
		description: "Estratégias de prospecção ativa B2B: cold call, e-mail personalizado e uso de dados cadastrais para gerar reuniões.",
		ogType:      "article",
		jsonLD: func(siteURL string) template.HTML {
			return BlogPostingStructuredData(siteURL, "/blog/estrategias-prospeccao-ativa",
				"5 estratégias de prospecção ativa que funcionam",
				"Táticas de prospecção ativa B2B com listas qualificadas.",
				"2026-03-22")
		},
	},
	"sobre-dados": {
		path:        "/sobre-dados",
		title:       "LeadB2B | Sobre os dados — Receita Federal",
		description: "Metodologia, fontes e atualização dos dados de empresas no LeadB2B. Base derivada de registros públicos da Receita Federal do Brasil (CNPJ).",
		ogType:      "website",
		jsonLD:      DatasetStructuredData,
	},
}

func StaticPageMetaForName(name, siteURL string) PageMeta {
	def, ok := staticPageDefs[name]
	if !ok {
		return DefaultMeta("", "", "/", siteURL)
	}
	meta := DefaultMeta(def.title, def.description, def.path, siteURL)
	meta.NoIndex = def.noIndex
	if def.ogType != "" {
		meta.OGType = def.ogType
	}
	meta.OGImage = OGImageURL(siteURL)
	if def.jsonLD != nil {
		meta.JSONLD = def.jsonLD(siteURL)
	}
	return meta
}

func HomePageMeta(siteURL string) PageMeta {
	meta := DefaultMeta(
		"LeadB2B | Prospecção ativa — Sistema diário de vendas",
		"Transforme empresas em clientes todos os dias. Plataforma de prospecção ativa com Kanban, funil de vendas e dados da Receita Federal. Comece grátis.",
		"/",
		siteURL,
	)
	meta.OGImage = OGImageURL(siteURL)
	meta.JSONLD = HomeStructuredData(siteURL)
	return meta
}

func StaticPagePath(name string) string {
	if def, ok := staticPageDefs[name]; ok {
		return def.path
	}
	return "/"
}

func StaticPageNames() []string {
	names := make([]string, 0, len(staticPageDefs))
	for name := range staticPageDefs {
		names = append(names, name)
	}
	return names
}

func IsBlogPostName(name string) bool {
	return strings.HasPrefix(name, "blog-") && name != "blog"
}
