package org.egl_cepgl.pm.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import org.egl_cepgl.pm.enums.ProcStatus;
import org.hibernate.annotations.*;
import org.hibernate.mapping.Property;

import jakarta.persistence.*;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import java.time.Instant;
import java.util.*;

@Setter
@Getter
@Entity
@ToString
@Table(name="procurement", schema = "egl_pm_db")
@AllArgsConstructor
@NoArgsConstructor
@DynamicUpdate
@DiscriminatorValue("PRO")
public class Procurement extends AbstractEntity
{
    @Column(name="namep", length = 500)
    private String namep;

    @Column(name="description", length = 500)
    private String description;

    @ManyToOne(targetEntity = Project.class, fetch = FetchType.EAGER)
    @JoinColumn(name="project_id")
    private Project project;

    @ManyToOne(targetEntity = ProcurementCategory.class, fetch = FetchType.EAGER)
    @JoinColumn(name="category_id")
    private ProcurementCategory category;

//    @OneToMany(mappedBy = "procurement", targetEntity = File.class, cascade = CascadeType.MERGE)
//    private Set<File> files= new HashSet<>();

    @OneToMany(
            cascade = CascadeType.REMOVE,
            orphanRemoval = true,
            fetch = FetchType.EAGER)
    @JoinColumn(name = "procurement_id")
    List<File> files = new ArrayList<>();

    @ManyToMany(fetch = FetchType.LAZY, targetEntity = Applicant.class)
    @JoinTable(
            name = "procurement_applicants",
            schema = "egl_pm_db",
            joinColumns = @JoinColumn(name = "procurement_id"),
            inverseJoinColumns = @JoinColumn(name = "applicant_id"))
    private Set<Applicant> applicants;

    @ManyToMany(fetch = FetchType.LAZY, targetEntity = Enterprise.class)
    @JoinTable(
            name = "procurement_enterprises",
            schema = "egl_pm_db",
            joinColumns = @JoinColumn(name = "procurement_id"),
            inverseJoinColumns = @JoinColumn(name = "enterprise_id"))
    private Set<Enterprise> enterprises;

    @ManyToMany(fetch = FetchType.LAZY, targetEntity = Cabinet.class)
    @JoinTable(
            name = "procurement_cabinets",
            schema = "egl_pm_db",
            joinColumns = @JoinColumn(name = "procurement_id"),
            inverseJoinColumns = @JoinColumn(name = "cabinet_id"))
    private Set<Cabinet> cabinets;

    @Column(name= "candidat_type", length = 10)
    private String candidattype;

    @Column(name= "status", length = 10)
    private String status;

    @Column(name= "candidate_auto_apply")
    @ColumnDefault("false")
    private Boolean candidate_auto_apply;

    @Column(name= "entrydate")
    private Date entrydate;

    @Column(name= "expiry_date")
    private Date expiry_date;

    @Column(name= "progressdate")
    private Date progressdate;

    @Column(name= "signeddate")
    private Date signeddate;

    @Column(name= "signedpdate")
    private Date signedpdate;

    @Column(name= "completedvdate")
    private Date completedvdate;

    @Column(name= "completedpdate")
    private Date completedpdate;

//    public void add(File file)
//    {
//        if (file != null) {
//            if (files == null) {
//                files = new HashSet<File>();
//            }
//            files.add(file);
//            file.setProcurement(this);
//        }
//    }
}
