// Package storage provides unified storage interface backed by Redis + MySQL.
// This file defines the core data types used throughout the storage system.
package storage

// IndexEntry 是倒排索引中的单个条目。
// 一条索引记录表示"某个 URL 与某个关键词的相关性权重"。
type IndexEntry struct {
	Weight float32 `json:"w"` // 该 URL 在该关键词下的得分/权重
	URL    string  `json:"u"` // 网页 URL
}

// SnippetEntry 是 URL 对应的摘要信息缓存。
// 包含页面标题、描述、正文片段、抓取时间戳和内容哈希（用于增量重爬检测）。
type SnippetEntry struct {
	Title       string `json:"title"`        // 网页标题
	Description string `json:"desc"`         // meta description 或自动生成的描述
	Text        string `json:"text"`         // 正文前 N 字符的文本片段
	Timestamp   int64  `json:"ts"`           // 抓取该页面时的 Unix 时间戳
	ContentHash string `json:"hash"`         // 正文内容的 FNV-1a 哈希（用于增量重爬判断内容是否变化）
}

// SiteInfo 存放每个域名/主机的元信息。
type SiteInfo struct {
	VisitCount      int                `json:"visit_count"`       // 累计访问该网站的次数
	LastVisitTime   int64              `json:"last_visit_time"`   // 上次访问该网站的时间戳
	Fingerprint     any                `json:"fingerprint,omitempty"` // 网站指纹（用于识别重复站点）
	SuccessRate     *float64           `json:"success_rate,omitempty"` // 访问成功率（成功次数/总访问次数）
	HTMLStructure   string             `json:"html_structure,omitempty"` // HTML 结构特征摘要
	IPs             []string           `json:"ips,omitempty"`           // 该域名解析出的 IP 列表
	Quality         *float64           `json:"quality,omitempty"`       // 网站质量评分（0~1）
	HTTPSAvailable  *bool              `json:"https_available,omitempty"` // 是否支持 HTTPS
	Keywords        []string           `json:"keywords,omitempty"`       // 该网站的高频关键词列表
	OutLinks        []string           `json:"out_links,omitempty"`      // 从该网站页面提取的出站链接列表
	Languages       map[string]float64 `json:"languages,omitempty"`      // 网站语种分布（语种代码 → 占比）
	Redirects       map[string]string  `json:"redirects,omitempty"`     // 重定向链（URL → 最终 URL）
	ServerTypes     []string           `json:"server_types,omitempty"`   // 网站使用的 HTTP Server 类型列表
}
