package dev.awesomedev.mirim.domain;

import jakarta.persistence.*;

/**
 * 이 파일이 하는 일:
 * 주차별 체크리스트의 "항목 하나"를 표현하는 JPA 엔티티다.
 * 예: 1주차 1일차 "개발 환경 설치 완료".
 * 누가 체크했는지는 여기 저장하지 않고 Progress 엔티티가 따로 기록한다.
 */
@Entity
@Table(name = "checklist_items")
public class ChecklistItem {

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

    /** 몇 주차 항목인지 */
    @Column(nullable = false)
    private Integer week;

    /**
     * 몇 일차 항목인지. 주 전체에 걸친 항목이면 null.
     * 학습 포인트: 그래서 int가 아닌 Integer를 쓴다 — 원시 타입 int는 null을 담을 수 없다.
     * "값이 없을 수 있는" 컬럼은 반드시 래퍼 타입(Integer, Long)으로 선언해야 한다.
     */
    private Integer day;

    /** 체크리스트에 표시되는 문구 */
    @Column(nullable = false)
    private String label;

    /** 같은 주차 안에서의 정렬 순서 */
    @Column(nullable = false)
    private Integer sortOrder;

    protected ChecklistItem() {
    }

    public ChecklistItem(Integer week, Integer day, String label, Integer sortOrder) {
        this.week = week;
        this.day = day;
        this.label = label;
        this.sortOrder = sortOrder;
    }

    public Long getId() {
        return id;
    }

    public Integer getWeek() {
        return week;
    }

    public Integer getDay() {
        return day;
    }

    public String getLabel() {
        return label;
    }

    public Integer getSortOrder() {
        return sortOrder;
    }
}
