package repository

import (
	"context"

	"haixun-backend/internal/model/scan_post/domain/entity"
)

type ListFilter struct {
	BrandID       string
	TopicID       string
	Priority      string
	ProductFitMin int
	Recent7dOnly  bool
	Limit         int
}

type PersonaListFilter struct {
	PersonaID     string
	CopyMissionID string
	Flow          string
	Limit         int
}

type Repository interface {
	EnsureIndexes(ctx context.Context) error
	ClearForPlacementScan(ctx context.Context, tenantID, ownerUID, brandID, topicID string) error
	UpsertBatchForScan(ctx context.Context, tenantID, ownerUID, brandID, topicID string, posts []entity.ScanPost) (int, error)
	PruneScanJobPosts(ctx context.Context, tenantID, ownerUID, brandID, topicID, scanJobID string, keepPermalinks []string) error
	ReplaceForScan(ctx context.Context, tenantID, ownerUID, brandID, scanJobID string, posts []entity.ScanPost) error
	ReplaceForViralScan(ctx context.Context, tenantID, ownerUID, personaID, copyMissionID, scanJobID string, posts []entity.ScanPost) error
	Get(ctx context.Context, tenantID, ownerUID, brandID, postID string) (*entity.ScanPost, error)
	GetForPersona(ctx context.Context, tenantID, ownerUID, personaID, postID string) (*entity.ScanPost, error)
	UpdateOutreach(ctx context.Context, tenantID, ownerUID, brandID, postID string, patch entity.OutreachPatch) (*entity.ScanPost, error)
	Delete(ctx context.Context, tenantID, ownerUID, brandID, topicID, postID string) error
	DeleteMany(ctx context.Context, tenantID, ownerUID, brandID, topicID string, postIDs []string) (int, error)
	List(ctx context.Context, tenantID, ownerUID string, filter ListFilter) ([]entity.ScanPost, error)
	ListForPersona(ctx context.Context, tenantID, ownerUID string, filter PersonaListFilter) ([]entity.ScanPost, error)
	CountByBrand(ctx context.Context, tenantID, ownerUID, brandID string) (int, error)
	AttachTopicID(ctx context.Context, tenantID, ownerUID, brandID, topicID string) error
}
