package ec.edu.espe.movilidad.MovilidadWS.Model;


import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Set;

@Getter
@Setter
@Entity
@Table(name = "uzytusuario", schema = "UTIC1")
public class ModelUzyTUsuario {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "uzytusuario_id_seq")
    @SequenceGenerator(name = "uzytusuario_id_seq", sequenceName = "SEQ_UZYTUSUARIO", allocationSize = 1)
    @Column(name = "uzytusuario_id")
    private Long uzytusuario_id;

    @Column(name = "uzytusuario_cc")
    private String uzytusuario_cc;

    @Column(name = "uzytusuario_clave")
    private String uzytusuario_clave;

    @Column(name = "uzytusuario_nombres")
    private String uzytusuario_nombres;

    @Column(name = "uzytusuario_apellidos", nullable = false)
    private String uzytusuario_apellidos;

    @Column(name = "uzytusuario_email")
    private String uzytusuario_email;

    @Column(name = "uzytusuario_fecharegistro")
    private Date fechaRegistro;

    @Column(name = "uzytusuario_estado")
    private String uzytusuario_estado;

    @Column(name = "uzytusuario_mail_sinformul")
    private Integer uzytusuario_mail_sinformul;

    @Column(name = "uzytusuario_mail_incompletos")
    private Integer uzytusuario_mail_incompletos;

    @Column(name = "uzytusuario_tipo_doc")
    private String uzytusuario_tipo_doc;

    @Column(name = "uzytusuario_cod_senescyt")
    private String uzytusuario_cod_senescyt;

    @Column(name = "uzytusuario_fecha_act_micuenta")
    private Date uzytusuario_fecha_act_micuenta;

    @Column(name = "uzytusuario_hexadecimalid")
    private String uzytusuario_hexadecimalid;

    @Column(name = "uzytusuario_tratamiento")
    private String uzytusuario_tratamiento;

    @Column(name = "uzytusuario_modificacion")
    private Integer uzytusuario_modificacion;

    @Column(name = "uzytusuario_tipo_user")
    private String uzytusuario_tipo_user;

    @Column(name = "uzytusuario_email_institucional")
    private String uzytusuario_email_institucional;

    @Column(name = "uzytusuario_telefono_fijo")
    private String uzytusuario_telefono_fijo;

    @Column(name = "uzytusuario_telefono_celular")
    private String uzytusuario_telefono_celular;

    @Column(name = "spriden_id")
    private String spriden_id;

    @Column(name = "spriden_pidm")
    private Integer spriden_pidm;

    @Column(name = "uzytusuario_clave_tmp")
    private String uzytusuario_clave_tmp;

    @Column(name = "spbpers_name_prefix")
    private String spbpers_name_prefix;

    @Column(name = "spbpers_sex")
    private String spbpers_sex;

    @Column(name = "uzytusuario_campus")
    private String uzytusuario_campus;

    @Column(name = "uzytusuario_departamento")
    private String uzytusuario_departamento;

    @Column(name = "uzytusuario_foto")
    private String uzytusuario_foto;


    //RELACIÓN CON LA TABLA ANEXOSPR-TABLA HIJA

    @JsonIgnore
    @OneToMany(mappedBy = "uzytusuario")
    private Set<ModelUzyTavAnexoSPR> modelUzyTavAnexoSPRSet = new LinkedHashSet<>();

    //RELACIÓN CON LA TABLA COORDINADOR_VINCULACIÓN- TABLA HIJA

    @JsonIgnore
    @OneToMany(mappedBy = "uzytusuario")
    private Set<ModelUzyTavCoordinadorVincu> modelUzyTavCoordinadorVincuSet = new LinkedHashSet<>();

    //RELACIÓN CON LA TABLA RESPONSABLEPROG MEDIANTE EL CAMPO uzytusuario_id_docente-TABLA HIJA,
    @JsonIgnore
    @OneToMany(mappedBy = "iddocente")
    private Set<ModelUzyTavResponsableProg> modelUzyTavResponsableProgSet = new LinkedHashSet<>();
    //RELACIÓN CON PROYECTO-TABLA HIJA

    @JsonIgnore
    @OneToMany(mappedBy = "uzytusuario")
    private Set<ModelUzyTavProyec> modelUzyTavProyecSet = new LinkedHashSet<>();

    //RELACIÓN CON PERFIL

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "UZYTPERFIL_USUARIO",
            joinColumns = @JoinColumn(name = "UZYTUSUARIO_ID"),
            inverseJoinColumns = @JoinColumn(name = "UZYTPERFIL_ID"))
    private Set<ModelUzyTPerfil> uzytperfils = new LinkedHashSet<>();

}