package dev.awesomedev.mirim.domain;

import jakarta.persistence.*;

/**
 * 이 파일이 하는 일:
 * 주차·일차별 과제를 표현하는 JPA 엔티티다.
 * 과제의 종류(kind)로 필수 과제(MAIN), 심화 과제(EXTRA), 디자인 과제(DESIGN)를 구분한다.
 */
@Entity
@Table(name = "assignments")
public class Assignment {

    /**
     * 학습 포인트: GenerationType.IDENTITY — 기본키(id) 값을 자바가 아니라
     * DB의 자동 증가 기능(PostgreSQL의 identity 컬럼)이 만들게 한다.
     * 그래서 save() 전에는 id가 null이고, INSERT가 실행된 뒤에야 값이 채워진다.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

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

    /** 몇 일차 과제인지 */
    @Column(nullable = false)
    private Integer day;

    /** 과제 종류: MAIN | EXTRA | DESIGN */
    @Column(nullable = false)
    private String kind;

    /** 과제 제목 */
    @Column(nullable = false)
    private String title;

    /**
     * 과제 설명.
     * 학습 포인트: 기본 VARCHAR(255)로는 긴 설명이 잘리므로 text 타입으로 지정한다.
     */
    @Column(columnDefinition = "text")
    private String summary;

    protected Assignment() {
    }

    public Assignment(Integer week, Integer day, String kind, String title, String summary) {
        this.week = week;
        this.day = day;
        this.kind = kind;
        this.title = title;
        this.summary = summary;
    }

    public Long getId() {
        return id;
    }

    public Integer getWeek() {
        return week;
    }

    public Integer getDay() {
        return day;
    }

    public String getKind() {
        return kind;
    }

    public String getTitle() {
        return title;
    }

    public String getSummary() {
        return summary;
    }
}
