package workspace

import "time"

type TimelineEvidenceSource string
type TimelineEvidenceSourceType string

const (
	TimelineEvidenceSourceJira   TimelineEvidenceSource = "jira"
	TimelineEvidenceSourceDevOps TimelineEvidenceSource = "devops"
	TimelineEvidenceSourceTask   TimelineEvidenceSource = "task"
	TimelineEvidenceSourceManual TimelineEvidenceSource = "manual"
	TimelineEvidenceSourceSystem TimelineEvidenceSource = "system"
	TimelineEvidenceSourceLark   TimelineEvidenceSource = "lark"
)

const (
	TimelineEvidenceSourceTypeJiraComment        TimelineEvidenceSourceType = "jira_comment"
	TimelineEvidenceSourceTypeJiraStatus         TimelineEvidenceSourceType = "jira_status"
	TimelineEvidenceSourceTypeDevOpsOperation    TimelineEvidenceSourceType = "devops_operation"
	TimelineEvidenceSourceTypeDevOpsConfigChange TimelineEvidenceSourceType = "devops_config_change"
	TimelineEvidenceSourceTypeTaskUpdate         TimelineEvidenceSourceType = "task_update"
	TimelineEvidenceSourceTypeManualNote         TimelineEvidenceSourceType = "manual_note"
	TimelineEvidenceSourceTypeLarkMessage        TimelineEvidenceSourceType = "lark_message"
)

type TimelineEntryStatus string
type TimelineEntrySource string
type TimelineEvidenceRelation string

const (
	TimelineEntryStatusDraft      TimelineEntryStatus = "draft"
	TimelineEntryStatusConfirmed  TimelineEntryStatus = "confirmed"
	TimelineEntryStatusHidden     TimelineEntryStatus = "hidden"
	TimelineEntryStatusSuperseded TimelineEntryStatus = "superseded"
)

const (
	TimelineEntrySourceAI     TimelineEntrySource = "ai"
	TimelineEntrySourceHuman  TimelineEntrySource = "human"
	TimelineEntrySourceSystem TimelineEntrySource = "system"
)

const (
	TimelineEvidenceRelationPrimary     TimelineEvidenceRelation = "primary"
	TimelineEvidenceRelationSupporting  TimelineEvidenceRelation = "supporting"
	TimelineEvidenceRelationConflicting TimelineEvidenceRelation = "conflicting"
)

type TimelineEvidence struct {
	ID               uint64                     `json:"id"`
	WorkspaceID      uint64                     `json:"workspace_id"`
	Source           TimelineEvidenceSource     `json:"source"`
	SourceType       TimelineEvidenceSourceType `json:"source_type"`
	SourceKey        string                     `json:"source_key"`
	OccurredAt       *time.Time                 `json:"occurred_at,omitempty"`
	SourceUpdatedAt  *time.Time                 `json:"source_updated_at,omitempty"`
	ObservedAt       time.Time                  `json:"observed_at"`
	ActorID          string                     `json:"actor_id,omitempty"`
	ActorDisplayName string                     `json:"actor_display_name,omitempty"`
	Content          string                     `json:"content,omitempty"`
	ContentHash      string                     `json:"content_hash"`
	MetadataJSON     string                     `json:"metadata_json"`
	CreatedAt        int64                      `json:"created_at,omitempty"`
	UpdatedAt        *int64                     `json:"updated_at,omitempty"`
}

type TimelineEntry struct {
	ID            uint64              `json:"id"`
	WorkspaceID   uint64              `json:"workspace_id"`
	OccurredAt    time.Time           `json:"occurred_at"`
	SortOrder     *int                `json:"sort_order,omitempty"`
	Title         string              `json:"title"`
	Details       string              `json:"details,omitempty"`
	EventKind     string              `json:"event_kind,omitempty"`
	Topic         string              `json:"topic,omitempty"`
	EntitiesJSON  string              `json:"entities_json"`
	Status        TimelineEntryStatus `json:"status"`
	Source        TimelineEntrySource `json:"source"`
	Confidence    *float64            `json:"confidence,omitempty"`
	SupersededBy  *uint64             `json:"superseded_by,omitempty"`
	MetadataJSON  string              `json:"metadata_json"`
	Version       uint64              `json:"version"`
	CreatedBy     string              `json:"created_by,omitempty"`
	UpdatedBy     string              `json:"updated_by,omitempty"`
	CreatedAt     int64               `json:"created_at,omitempty"`
	UpdatedAt     *int64              `json:"updated_at,omitempty"`
	EvidenceIDs   []uint64            `json:"evidence_ids,omitempty"`
	EvidenceCount int                 `json:"evidence_count,omitempty"`
}

type TimelineEntryEvidence struct {
	WorkspaceID uint64                   `json:"workspace_id"`
	EntryID     uint64                   `json:"entry_id"`
	EvidenceID  uint64                   `json:"evidence_id"`
	Relation    TimelineEvidenceRelation `json:"relation"`
	CreatedAt   int64                    `json:"created_at,omitempty"`
}

type TimelineSummary struct {
	ID           uint64              `json:"id"`
	WorkspaceID  uint64              `json:"workspace_id"`
	Summary      string              `json:"summary"`
	Source       TimelineEntrySource `json:"source"`
	MetadataJSON string              `json:"metadata_json"`
	CreatedBy    string              `json:"created_by,omitempty"`
	UpdatedBy    string              `json:"updated_by,omitempty"`
	CreatedAt    int64               `json:"created_at,omitempty"`
	UpdatedAt    *int64              `json:"updated_at,omitempty"`
}

type TimelineSyncState struct {
	ID                  uint64                 `json:"id"`
	WorkspaceID         uint64                 `json:"workspace_id"`
	Source              TimelineEvidenceSource `json:"source"`
	SourceType          string                 `json:"source_type"`
	SourceKey           string                 `json:"source_key"`
	LastSeenUpdatedAt   *time.Time             `json:"last_seen_updated_at,omitempty"`
	LastSeenCursor      string                 `json:"last_seen_cursor,omitempty"`
	LastSeenContentHash string                 `json:"last_seen_content_hash,omitempty"`
	MetadataJSON        string                 `json:"metadata_json"`
	CreatedAt           int64                  `json:"created_at,omitempty"`
	UpdatedAt           *int64                 `json:"updated_at,omitempty"`
}

type TimelineEntryRevision struct {
	ID          uint64 `json:"id"`
	EntryID     uint64 `json:"entry_id"`
	WorkspaceID uint64 `json:"workspace_id"`
	ChangedBy   string `json:"changed_by"`
	ChangeType  string `json:"change_type"`
	BeforeJSON  string `json:"before_json,omitempty"`
	AfterJSON   string `json:"after_json,omitempty"`
	CreatedAt   int64  `json:"created_at,omitempty"`
}
