package com.sn.sowsysrestapi.domain.entity;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import javax.persistence.*;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Entity
@Data
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@ToString
@Table(name = "report_directory")
public class ReportDirectory {

    @EqualsAndHashCode.Include
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    @Column(name = "owner_code", unique = true)
    private String ownerCode;

    @Column(name = "owner_username", unique = true)
    private String ownerUsername;

    @CreationTimestamp
    @Column(name = "created_on")
    private OffsetDateTime createdOn;

    @UpdateTimestamp
    @Column(name = "updated_on")
    private OffsetDateTime updatedOn;

    @ElementCollection
    @Column(name = "supervisor_code")
    private Set<String> supervisorCode = new HashSet<>() ;

    @OneToOne
    @JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "FK_USER_ID_REPORT_DIRECTORY"))
    private User user;

    @OneToMany(mappedBy = "reportDirectory")
    private List<Report> reportList = new ArrayList<>();


}
