package org.egl_cepgl.pm.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Data
@Entity
@ToString
@Table(name="applicant", schema = "egl_pm_db")
@AllArgsConstructor
@NoArgsConstructor
@DynamicUpdate
public class Applicant extends AbstractEntity
{
    @Column(name="id_kcloak", length = 100)
    private String id_kcloak;

    @Column(name="first_name", length = 30)
    private String first_name;

    @Column(name="last_name", length = 30)
    private String last_name;

    @Column(name="email", length = 50)
    private String email;

    @Column(name="phone", length = 20)
    private String phone;

    @Column(name="address", length = 300)
    private String address;

    @Column(name="gender", length = 10)
    private String gender;

    @ManyToOne(targetEntity = Country.class)
    @JoinColumn(name="nationality")
    private Country country;

    @Column(name="organization", length = 50)
    private String organization;

    @ManyToOne(targetEntity = ApplicantQualification.class)
    @JoinColumn(name="qualification")
    private ApplicantQualification qualification;

    @Column(name="experience")
    private Integer experience;

    @OneToMany(
            cascade = CascadeType.REMOVE,
            orphanRemoval = true,
            fetch = FetchType.EAGER)
    @JoinColumn(name = "applicant_id")
    List<File> files = new ArrayList<>();

    @ManyToMany(mappedBy = "applicants", targetEntity = Procurement.class)
    private Set<Procurement> procurements;

    @Column(name="status")
    private Boolean status;
}
