package domain

import (
	"context"
	"github.com/google/uuid"
)

type QuestionDetailCFIT struct {
	QuestionID    uuid.UUID `json:"question_id"`
	ImageQuestion string    `json:"image_question"`
	ImageOptions  any       `json:"image_options"`
	CorrectAnswer string    `json:"correct_answer"`
	Explanation   string    `json:"explanation"`
}

type QuestionDetailDISC struct {
	QuestionID        uuid.UUID `json:"question_id"`
	Statement         string    `json:"statement"`
	CategoryMostCode  string    `json:"category_most_code"`
	CategoryLeastCode string    `json:"category_least_code"`
}

type QuestionDetailMBTI struct {
	QuestionID uuid.UUID `json:"question_id"`
	Statement  string    `json:"statement"`
	Dimension  string    `json:"dimension"` // E/I, S/N, T/F, J/P
	Code       string    `json:"code"`      // The actual code it contributes to
}

type QuestionDetailMSDT struct {
	QuestionID uuid.UUID `json:"question_id"`
	Statement  string    `json:"statement"`
	Dimension  string    `json:"dimension"`
}

type QuestionDetailPAPI struct {
	QuestionID uuid.UUID `json:"question_id"`
	Statement  string    `json:"statement"`
	FactorCode string    `json:"factor_code"`
}

type AssessmentQuestionRepository interface {
	CreateQuestion(ctx context.Context, q *Question) error
	GetQuestionByID(ctx context.Context, id uuid.UUID) (*Question, error)
	ListQuestionsByTestType(ctx context.Context, testTypeID uuid.UUID) ([]Question, error)

	// Details
	SaveCFITDetail(ctx context.Context, d *QuestionDetailCFIT) error
	SaveDISCDetail(ctx context.Context, d *QuestionDetailDISC) error
	SaveMBTIDetail(ctx context.Context, d *QuestionDetailMBTI) error
	SaveMSDTDetail(ctx context.Context, d *QuestionDetailMSDT) error
	SavePAPIDetail(ctx context.Context, d *QuestionDetailPAPI) error
}
