package structs

import "time"

const (
	LessonStateActive = 1
	LessonStateDraft  = 2
)

type Lesson struct {
	Id             string `gorm:"primaryKey;type:varchar(36)"`
	OrganizationId string `gorm:"type:varchar(36)"`
	State          uint8  `gorm:"type:tinyint(1)"`
	Title          string `gorm:"type:varchar(255)"`
	ThumbnailUrl   string `gorm:"type:varchar(255)"`
	CreatorUserId  string `gorm:"type:varchar(36)"`
	CreatedAt      time.Time
	UpdatedAt      time.Time
}

type LessonContent struct {
	Id        string `gorm:"primaryKey;type:varchar(36)"`
	LessonId  string `gorm:"type:varchar(36)"`
	Page      uint16 `gorm:"type:smallint(5)"` // Page number
	Position  uint16 `gorm:"type:smallint(5)"` // Position on the page
	Type      uint8  // Type of content, like text, image, video, etc
	Data      string `gorm:"type:text"`
	CreatedAt time.Time
	UpdatedAt time.Time
}

// swagger:model LessonResponse
type LessonResponse struct {
	Id            string
	State         uint8
	Title         string
	ThumbnailUrl  string
	CreatorUserId string
	CreatedAt     time.Time
}

// swagger:model CreateLessonResponse
type CreateLessonResponse struct {
	Id string
}

// swagger:model LessonSettings
type LessonSettings struct {
	Title        string
	ThumbnailUrl string
	State        uint8
}

// swagger:model UpdateLessonPreviewTitleRequest
type UpdateLessonPreviewTitleRequest struct {
	Title string
}

// swagger:model UpdateLessonStateRequest
type UpdateLessonStateRequest struct {
	State uint8
}

// swagger:model AddLessonContentRequest
type AddLessonContentRequest struct {
	Type uint8
	Data string
}

// swagger:model AddLessonContentResponse
type AddLessonContentResponse struct {
	Id string
}

// swagger:model UpdateLessonContentRequest
type UpdateLessonContentRequest struct {
	Type uint8
	Data string
}

// swagger:model UpdateLessonContentResponse
type LessonIdParam struct {
	LessonId string
}

type LessonIdAndContentIdParam struct {
	LessonId  string
	ContentId string
}

// swagger:model GetLessonContentsResponse
type GetLessonContentsResponse struct {
	Id       string
	Page     uint16
	Position uint16
	Type     uint8
	Data     string
}

type UpdateLessonContentPositionRequest struct {
	Position uint16
}

type UploadLessonContentFileParam struct {
	LessonId  string
	ContentId string
	Type      string
}
