package domain

import (
	"context"
	"time"

	"github.com/google/uuid"
)

type Question struct {
	ID             uuid.UUID `json:"id"`
	TestTypeID     uuid.UUID `json:"test_type_id"`
	QuestionType   string    `json:"question_type"`
	Title          string    `json:"title"`
	Instruction    string    `json:"instruction"`
	QuestionText   string    `json:"question_text"`
	QuestionMedia  string    `json:"question_media"`
	Config         any       `json:"config"`
	AnswerKey      any       `json:"answer_key,omitempty"` // Omitted from frontend if needed
	ScoringWeight  float64   `json:"scoring_weight"`
	Difficulty     int       `json:"difficulty"`
	Discrimination float64   `json:"discrimination"`
	OrderNumber    int       `json:"order_number"`
	IsActive       bool      `json:"is_active"`
	Version        int       `json:"version"`
	CreatedAt      time.Time `json:"created_at"`
	UpdatedAt      time.Time `json:"updated_at"`
	DeletedAt      *time.Time `json:"deleted_at,omitempty"`
	
	Items          []*QuestionItem `json:"question_items,omitempty"`
}

type QuestionItem struct {
	ID         uuid.UUID `json:"id"`
	QuestionID uuid.UUID `json:"question_id"`
	ItemOrder  int       `json:"item_order"`
	Content    string    `json:"content"`
	Media      string    `json:"media"`
	Value      float64   `json:"value"`
	Meta       any       `json:"meta"`
	CreatedAt  time.Time `json:"created_at"`
}

type QuestionRepository interface {
	Create(ctx context.Context, q *Question) error
	GetByID(ctx context.Context, id uuid.UUID) (*Question, error)
	GetByTestType(ctx context.Context, testTypeID uuid.UUID) ([]*Question, error)
	Update(ctx context.Context, q *Question) error
	Delete(ctx context.Context, id uuid.UUID) error
	
	CreateItem(ctx context.Context, item *QuestionItem) error
	DeleteItemsByQuestionID(ctx context.Context, questionID uuid.UUID) error
}

type QuestionUsecase interface {
	Create(ctx context.Context, q *Question) error
	GetByID(ctx context.Context, id uuid.UUID) (*Question, error)
	GetByTestType(ctx context.Context, testTypeID uuid.UUID) ([]*Question, error)
	Update(ctx context.Context, q *Question) error
	Delete(ctx context.Context, id uuid.UUID) error
}
