package dev.awesomedev.mirim.domain;

import jakarta.persistence.*;

/**
 * 이 파일이 하는 일:
 * 학습 센터 코스의 퀴즈 문항 하나(4지선다)를 담는 JPA 엔티티다.
 *
 * 학습 포인트: 정답(answerIndex)이 이 테이블, 즉 서버에만 있다.
 * 문항을 내려줄 때 정답을 빼고 주고, 채점은 서버가 한다 —
 * 프론트에 정답을 보내면 개발자도구만 열어도 답이 보이기 때문이다.
 * "믿을 수 없는 곳(브라우저)에 비밀을 두지 않는다"는 보안의 기본 원칙.
 */
@Entity
@Table(name = "quiz_question")
public class QuizQuestion {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /** 어느 코스의 문항인지 (courseCatalog의 slug — CourseProgress와 같은 방식) */
    @Column(name = "course_slug", nullable = false, length = 60)
    private String courseSlug;

    @Column(nullable = false, columnDefinition = "text")
    private String question;

    @Column(nullable = false, columnDefinition = "text")
    private String option1;

    @Column(nullable = false, columnDefinition = "text")
    private String option2;

    @Column(nullable = false, columnDefinition = "text")
    private String option3;

    @Column(nullable = false, columnDefinition = "text")
    private String option4;

    /** 정답 보기 번호. 0~3 (option1이 0) — 프로그래밍은 0부터 센다! */
    @Column(nullable = false)
    private Integer answerIndex;

    /** 정답 해설 — 채점 후에만 내려준다 */
    @Column(nullable = false, columnDefinition = "text")
    private String explanation;

    @Column(nullable = false)
    private Integer sortOrder;

    protected QuizQuestion() {
    }

    public QuizQuestion(String courseSlug, String question,
                        String option1, String option2, String option3, String option4,
                        Integer answerIndex, String explanation, Integer sortOrder) {
        this.courseSlug = courseSlug;
        this.question = question;
        this.option1 = option1;
        this.option2 = option2;
        this.option3 = option3;
        this.option4 = option4;
        this.answerIndex = answerIndex;
        this.explanation = explanation;
        this.sortOrder = sortOrder;
    }

    public Long getId() {
        return id;
    }

    public String getCourseSlug() {
        return courseSlug;
    }

    public String getQuestion() {
        return question;
    }

    public String getOption1() {
        return option1;
    }

    public String getOption2() {
        return option2;
    }

    public String getOption3() {
        return option3;
    }

    public String getOption4() {
        return option4;
    }

    public Integer getAnswerIndex() {
        return answerIndex;
    }

    public String getExplanation() {
        return explanation;
    }

    public Integer getSortOrder() {
        return sortOrder;
    }
}
