package entity

const (
	TopicCandidateCollectionName  = "topic_candidates"
	ContentPlanCollectionName     = "content_plans"
	FeedbackEventCollectionName   = "feedback_events"
	KnowledgeSourceCollectionName = "knowledge_sources"
	KnowledgeChunkCollectionName  = "knowledge_chunks"
	FormulaPoolCollectionName     = "formula_pools"
)

type TopicCandidate struct {
	ID                  string   `bson:"_id"`
	TenantID            string   `bson:"tenant_id"`
	OwnerUID            string   `bson:"owner_uid"`
	PersonaID           string   `bson:"persona_id"`
	Name                string   `bson:"name"`
	Source              string   `bson:"source,omitempty"`
	Category            string   `bson:"category,omitempty"`
	SeedQuery           string   `bson:"seed_query,omitempty"`
	TrendReason         string   `bson:"trend_reason,omitempty"`
	TrendKeywords       []string `bson:"trend_keywords,omitempty"`
	HeatScore           int      `bson:"heat_score,omitempty"`
	FitScore            int      `bson:"fit_score,omitempty"`
	InteractionScore    int      `bson:"interaction_score,omitempty"`
	ExtendScore         int      `bson:"extend_score,omitempty"`
	RiskScore           int      `bson:"risk_score,omitempty"`
	FinalScore          float64  `bson:"final_score,omitempty"`
	RecommendedMissions []string `bson:"recommended_missions,omitempty"`
	Status              string   `bson:"status,omitempty"`
	CreateAt            int64    `bson:"create_at"`
	UpdateAt            int64    `bson:"update_at"`
}

type KnowledgeSource struct {
	ID           string `bson:"_id"`
	TenantID     string `bson:"tenant_id"`
	OwnerUID     string `bson:"owner_uid"`
	PersonaID    string `bson:"persona_id"`
	SourceType   string `bson:"source_type"`
	Title        string `bson:"title,omitempty"`
	Filename     string `bson:"filename,omitempty"`
	RawContent   string `bson:"raw_content,omitempty"`
	ParsedStatus string `bson:"parsed_status,omitempty"`
	ChunkCount   int    `bson:"chunk_count,omitempty"`
	CreateAt     int64  `bson:"create_at"`
}

type KnowledgeChunk struct {
	ID        string   `bson:"_id"`
	TenantID  string   `bson:"tenant_id"`
	OwnerUID  string   `bson:"owner_uid"`
	PersonaID string   `bson:"persona_id"`
	SourceID  string   `bson:"source_id"`
	Content   string   `bson:"content"`
	Topics    []string `bson:"topics,omitempty"`
	StyleTags []string `bson:"style_tags,omitempty"`
	RiskLevel string   `bson:"risk_level,omitempty"`
	CreateAt  int64    `bson:"create_at"`
}

type FormulaPool struct {
	ID        string   `bson:"_id"`
	TenantID  string   `bson:"tenant_id"`
	OwnerUID  string   `bson:"owner_uid"`
	PersonaID string   `bson:"persona_id"`
	Type      string   `bson:"type"`
	Name      string   `bson:"name"`
	Pattern   string   `bson:"pattern,omitempty"`
	UseCases  []string `bson:"use_cases,omitempty"`
	Avoid     []string `bson:"avoid,omitempty"`
	Weight    int      `bson:"weight,omitempty"`
	CreateAt  int64    `bson:"create_at"`
	UpdateAt  int64    `bson:"update_at"`
}

type ContentPlan struct {
	ID                  string   `bson:"_id"`
	TenantID            string   `bson:"tenant_id"`
	OwnerUID            string   `bson:"owner_uid"`
	PersonaID           string   `bson:"persona_id"`
	TopicCandidateID    string   `bson:"topic_candidate_id,omitempty"`
	Topic               string   `bson:"topic"`
	Mission             string   `bson:"mission"`
	TargetAudience      string   `bson:"target_audience,omitempty"`
	Angle               string   `bson:"angle,omitempty"`
	OpeningType         string   `bson:"opening_type,omitempty"`
	BodyType            string   `bson:"body_type,omitempty"`
	Emotion             string   `bson:"emotion,omitempty"`
	EndingType          string   `bson:"ending_type,omitempty"`
	CtaType             string   `bson:"cta_type,omitempty"`
	RiskLevel           string   `bson:"risk_level,omitempty"`
	RequiresHumanReview bool     `bson:"requires_human_review,omitempty"`
	Avoid               []string `bson:"avoid,omitempty"`
	SelectedKnowledge   []string `bson:"selected_knowledge,omitempty"`
	Status              string   `bson:"status,omitempty"`
	CreateAt            int64    `bson:"create_at"`
	UpdateAt            int64    `bson:"update_at"`
}

type FeedbackEvent struct {
	ID            string `bson:"_id"`
	TenantID      string `bson:"tenant_id"`
	OwnerUID      string `bson:"owner_uid"`
	PersonaID     string `bson:"persona_id"`
	ContentPlanID string `bson:"content_plan_id,omitempty"`
	DraftID       string `bson:"draft_id,omitempty"`
	Decision      string `bson:"decision"`
	Note          string `bson:"note,omitempty"`
	Snapshot      string `bson:"snapshot,omitempty"`
	CreateAt      int64  `bson:"create_at"`
}
