package ru.ulstu.paper.model;

import org.hibernate.validator.constraints.NotBlank;
import ru.ulstu.core.model.BaseEntity;
import ru.ulstu.file.model.FileData;
import ru.ulstu.user.model.User;

import javax.persistence.*;
import java.util.Date;
import java.util.List;

@Entity
public class Paper extends BaseEntity {
    public enum PaperStatus {
        ATTENTION("Обратить внимание"), ON_PREPARATION("На подготовке"), DRAFT("Черновик"), COMPLETED("Завершена");

        private String name;

        PaperStatus(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }

    @NotBlank
    private String title;

    @Enumerated(value = EnumType.STRING)
    private PaperStatus status;

    @Column(name = "create_date")
    private Date createDate;

    @Column(name = "update_date")
    private Date updateDate;

    @Column(name = "deadline_date")
    private Date deadlineDate;

    private String comment;

    private Boolean locked;

    @ManyToOne
    @JoinColumn(name = "file_id")
    private FileData fileData;

    @ManyToMany
    private List<User> authors;

    public PaperStatus getStatus() {
        return status;
    }

    public void setStatus(PaperStatus status) {
        this.status = status;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Date getUpdateDate() {
        return updateDate;
    }

    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }

    public Date getDeadlineDate() {
        return deadlineDate;
    }

    public void setDeadlineDate(Date deadlineDate) {
        this.deadlineDate = deadlineDate;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public Boolean getLocked() {
        return locked;
    }

    public void setLocked(Boolean locked) {
        this.locked = locked;
    }

    public FileData getFileData() {
        return fileData;
    }

    public void setFileData(FileData fileData) {
        this.fileData = fileData;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public List<User> getAuthors() {
        return authors;
    }

    public void setAuthors(List<User> authors) {
        this.authors = authors;
    }
}
