package usecase

import (
	"context"

	libkg "haixun-backend/internal/library/knowledge"
)

type GraphSummary struct {
	ID             string
	BrandID        string
	TopicID        string
	Seed           string
	Nodes          []libkg.Node
	Edges          []libkg.Edge
	BraveSources   []libkg.BraveSource
	ExpandStrategy string
	PainTagCount   int
	GeneratedAt    int64
	CreateAt       int64
	UpdateAt       int64
}

type UpsertRequest struct {
	TenantID       string
	OwnerUID       string
	BrandID        string
	TopicID        string
	Seed           string
	Nodes          []libkg.Node
	Edges          []libkg.Edge
	BraveSources   []libkg.BraveSource
	ExpandStrategy string
	PainTagCount   int
	GeneratedAt    int64
}

type NodeUpdate struct {
	NodeID           string
	SelectedForScan  *bool
	RelevanceTags    []string
	RelevanceTagsSet bool
	RecencyTags      []string
	RecencyTagsSet   bool
}

type UpdateNodesRequest struct {
	TenantID string
	OwnerUID string
	BrandID  string
	TopicID  string
	Updates  []NodeUpdate
}

type UseCase interface {
	Get(ctx context.Context, tenantID, ownerUID, brandID string) (*GraphSummary, error)
	// brandID enables legacy fallback when graph was stored under brand_id without topic_id.
	GetByTopic(ctx context.Context, tenantID, ownerUID, topicID, brandID string) (*GraphSummary, error)
	Upsert(ctx context.Context, req UpsertRequest) (*GraphSummary, error)
	UpdateNodes(ctx context.Context, req UpdateNodesRequest) (*GraphSummary, error)
	AttachTopicID(ctx context.Context, tenantID, ownerUID, brandID, topicID string) error
}
