package models

import "time"

type Problem struct {
	Id          int32  `db:"id"`
	Title       string `db:"title"`
	TimeLimit   int32  `db:"time_limit"`
	MemoryLimit int32  `db:"memory_limit"`

	Legend       string `db:"legend"`
	InputFormat  string `db:"input_format"`
	OutputFormat string `db:"output_format"`
	Notes        string `db:"notes"`
	Scoring      string `db:"scoring"`
	LatexSummary string `db:"latex_summary"`

	LegendHtml       string `db:"legend_html"`
	InputFormatHtml  string `db:"input_format_html"`
	OutputFormatHtml string `db:"output_format_html"`
	NotesHtml        string `db:"notes_html"`
	ScoringHtml      string `db:"scoring_html"`

	CreatedAt time.Time `db:"created_at"`
	UpdatedAt time.Time `db:"updated_at"`
}

type ProblemsListItem struct {
	Id          int32     `db:"id"`
	Title       string    `db:"title"`
	MemoryLimit int32     `db:"memory_limit"`
	TimeLimit   int32     `db:"time_limit"`
	CreatedAt   time.Time `db:"created_at"`
	UpdatedAt   time.Time `db:"updated_at"`
}

type ProblemsList struct {
	Problems   []*ProblemsListItem `json:"problems"`
	Pagination Pagination          `json:"pagination"`
}

type ProblemsFilter struct {
	Page     int32
	PageSize int32
}

func (f ProblemsFilter) Offset() int32 {
	return (f.Page - 1) * f.PageSize
}

type ProblemUpdate struct {
	Title       *string `db:"title"`
	MemoryLimit *int32  `db:"memory_limit"`
	TimeLimit   *int32  `db:"time_limit"`

	Legend       *string `db:"legend"`
	InputFormat  *string `db:"input_format"`
	OutputFormat *string `db:"output_format"`
	Notes        *string `db:"notes"`
	Scoring      *string `db:"scoring"`

	LegendHtml       *string `db:"legend_html"`
	InputFormatHtml  *string `db:"input_format_html"`
	OutputFormatHtml *string `db:"output_format_html"`
	NotesHtml        *string `db:"notes_html"`
	ScoringHtml      *string `db:"scoring_html"`
}

type ProblemStatement struct {
	Legend       string `db:"legend"`
	InputFormat  string `db:"input_format"`
	OutputFormat string `db:"output_format"`
	Notes        string `db:"notes"`
	Scoring      string `db:"scoring"`
}

type Html5ProblemStatement struct {
	LegendHtml       string `db:"legend_html"`
	InputFormatHtml  string `db:"input_format_html"`
	OutputFormatHtml string `db:"output_format_html"`
	NotesHtml        string `db:"notes_html"`
	ScoringHtml      string `db:"scoring_html"`
}