package dev.awesomedev.mirim.domain;

import jakarta.persistence.*;

import java.time.Instant;

/**
 * 이 파일이 하는 일:
 * 퀴즈 응시 기록 하나 — 누가, 어느 코스 퀴즈를, 몇 점 맞았는지.
 *
 * 학습 포인트: 유니크 제약이 없다! CourseProgress(완료는 한 번)와 달리
 * 퀴즈는 여러 번 다시 풀 수 있어야 하므로 응시마다 행이 하나씩 쌓인다.
 * "최고 점수"는 저장하지 않고 조회할 때 계산한다 — 원본 기록을 남기면
 * 나중에 "몇 번 만에 통과했나" 같은 새 질문에도 답할 수 있다.
 */
@Entity
@Table(name = "quiz_result")
public class QuizResult {

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

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "user_id")
    private User user;

    @Column(name = "course_slug", nullable = false, length = 60)
    private String courseSlug;

    /** 맞힌 개수 */
    @Column(nullable = false)
    private Integer score;

    /** 전체 문항 수 (당시 기준 — 문항이 나중에 바뀌어도 기록은 그대로) */
    @Column(nullable = false)
    private Integer total;

    @Column(nullable = false)
    private Instant submittedAt;

    protected QuizResult() {
    }

    public QuizResult(User user, String courseSlug, Integer score, Integer total) {
        this.user = user;
        this.courseSlug = courseSlug;
        this.score = score;
        this.total = total;
        this.submittedAt = Instant.now();
    }

    public Long getId() {
        return id;
    }

    public User getUser() {
        return user;
    }

    public String getCourseSlug() {
        return courseSlug;
    }

    public Integer getScore() {
        return score;
    }

    public Integer getTotal() {
        return total;
    }

    public Instant getSubmittedAt() {
        return submittedAt;
    }
}
