package app

import "time"

type JobMode string

const (
	JobModeAnalyze JobMode = "analyze"
	JobModePR      JobMode = "pr"
	JobModeTicket  JobMode = "single_ticket"
)

type JobStatus string

const (
	JobQueued    JobStatus = "queued"
	JobRunning   JobStatus = "running"
	JobSucceeded JobStatus = "succeeded"
	JobFailed    JobStatus = "failed"
)

type JobTrigger string

const (
	JobTriggerLark      JobTrigger = "lark"
	JobTriggerFeedback  JobTrigger = "feedback"
	JobTriggerCandidate JobTrigger = "candidate"
)

type NotificationStatus string

const (
	NotificationPending NotificationStatus = "pending"
	NotificationSent    NotificationStatus = "sent"
)

type Job struct {
	ID                   string                     `json:"id"`
	MessageID            string                     `json:"messageId"`
	ChatID               string                     `json:"chatId"`
	LarkRootMessageID    string                     `json:"larkRootMessageId,omitempty"`
	SenderOpenID         string                     `json:"senderOpenId"`
	Request              string                     `json:"request"`
	IssueKey             string                     `json:"issueKey,omitempty"`
	Trigger              JobTrigger                 `json:"trigger,omitempty"`
	FeedbackID           int64                      `json:"feedbackId,omitempty"`
	CandidateID          int64                      `json:"candidateId,omitempty"`
	CandidateSource      string                     `json:"candidateSource,omitempty"`
	CandidateSignal      string                     `json:"candidateSignal,omitempty"`
	SourceRunDBID        int64                      `json:"sourceRunDbId,omitempty"`
	SourceJobID          int64                      `json:"sourceJobId,omitempty"`
	FeedbackAction       string                     `json:"feedbackAction,omitempty"`
	AnswerFingerprint    string                     `json:"answerFingerprint,omitempty"`
	Mode                 JobMode                    `json:"mode"`
	Status               JobStatus                  `json:"status"`
	ThreadID             string                     `json:"threadId,omitempty"`
	ResumeThreadID       string                     `json:"resumeThreadId,omitempty"`
	ResumeJobID          string                     `json:"resumeJobId,omitempty"`
	WorktreePath         string                     `json:"worktreePath,omitempty"`
	RepositoryBaseSHA    string                     `json:"repositoryBaseSha,omitempty"`
	Result               string                     `json:"result,omitempty"`
	PRURL                string                     `json:"prUrl,omitempty"`
	VerificationPRURL    string                     `json:"verificationPrUrl,omitempty"`
	MergeSHA             string                     `json:"mergeSha,omitempty"`
	VerificationMergeSHA string                     `json:"verificationMergeSha,omitempty"`
	ReplayRunID          string                     `json:"replayRunId,omitempty"`
	Verification         string                     `json:"verification,omitempty"`
	Investigation        *SingleTicketInvestigation `json:"investigation,omitempty"`
	Error                string                     `json:"error,omitempty"`
	NotificationStatus   NotificationStatus         `json:"notificationStatus,omitempty"`
	NotificationError    string                     `json:"notificationError,omitempty"`
	NotifiedAt           *time.Time                 `json:"notifiedAt,omitempty"`
	CreatedAt            time.Time                  `json:"createdAt"`
	UpdatedAt            time.Time                  `json:"updatedAt"`
}
