package model

import "time"

type SubmissionStatus int32

const (
	// Phase: Creation
	SubmissionStatusUnderConstruction   SubmissionStatus = 0
	SubmissionStatusChangesRequested    SubmissionStatus = 1

	// Phase: Review
	SubmissionStatusSubmitting          SubmissionStatus = 2
	SubmissionStatusSubmitted           SubmissionStatus = 3

	// Phase: Testing
	SubmissionStatusAcceptedUnvalidated SubmissionStatus = 4 // pending script review, can re-trigger validation
	SubmissionStatusValidating          SubmissionStatus = 5
	SubmissionStatusValidated           SubmissionStatus = 6
	SubmissionStatusUploading           SubmissionStatus = 7
	SubmissionStatusUploaded            SubmissionStatus = 8 // uploaded to the group, but pending release

	// Phase: Final SubmissionStatus
	SubmissionStatusRejected            SubmissionStatus = 9
	SubmissionStatusReleased            SubmissionStatus = 10
)

type Submission struct {
	ID            int64 `gorm:"primaryKey"`
	DisplayName   string
	Creator       string
	GameID        uint32
	CreatedAt     time.Time
	UpdatedAt     time.Time
	Submitter     uint64 // UserID
	AssetID       uint64
	AssetVersion  uint64
	ValidatedAssetID       uint64
	ValidatedAssetVersion  uint64
	Completed     bool   // Has this version of the map been completed at least once on maptest
	UploadedAssetID        uint64 // where to upload map fix.  if the TargetAssetID is 0, it's a new map.
	StatusID      SubmissionStatus
}