package org.egl_cepgl.pm.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import org.hibernate.annotations.*;
import org.hibernate.mapping.Property;

import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.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 = 200)
    private String namep;

    @Column(name="description", length = 200)
    private String description;

    @ManyToOne(targetEntity = Project.class)
    @JoinColumn(name="project_id")
    private Project project;

    @ManyToOne(targetEntity = ProcurementCategory.class)
    @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;

    @Column(name= "candidat_type", length = 10)
    private String candidat_type;

    @Column(name= "status")
    private Boolean status;

    @Column(name= "candidate_auto_apply")
    @ColumnDefault("false")
    private Boolean candidate_auto_apply;

    @Column(name= "entry_date")
    private Date entry_date;

    @Column(name= "expiry_date")
    private Date expiry_date;

//    public void add(File file)
//    {
//        if (file != null) {
//            if (files == null) {
//                files = new HashSet<File>();
//            }
//            files.add(file);
//            file.setProcurement(this);
//        }
//    }
}
