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

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

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.*;
import javax.validation.constraints.Size;
import java.time.LocalDate;
import java.util.LinkedHashSet;
import java.util.Set;
@Getter
@Setter
@Entity
@Table(name = "uzytavobjetivo_programa")
public class ModelUzytavObjetivoPrograma {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "uzytavobjetivo_programa_seq")
    @SequenceGenerator(name = "uzytavobjetivo_programa_seq", sequenceName = "SEQ_UZYTAVOBJETIVO_PROGRAMA", allocationSize = 1)
    @Column(name = "uzytavobjetivo_programa_id")
    private Long uzytavobjetivo_programa_id;

    @Size(max = 1000)
    @Column(name = "uzytavobjetivo_programaindicador", length = 1000)
    private String uzytavobjetivo_programaindicador;

    @Size(max = 1000)
    @Column(name = "uzytavobjetivo_programamverifica", length = 1000)
    private String uzytavobjetivo_programamverifica;

    @Size(max = 1000)
    @Column(name = "uzytavobjetivo_programasupuestos", length = 1000)
    private String uzytavobjetivo_programasupuestos;

    //RELACIÓN CON PROGRAMA TABLA PADRE
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "uzytavprograma_v_id")
    private ModelUzyTavPrograma_V uzytavprograma_v;

    @Size(max = 1000)
    @Column(name = "uzytavobjetivo_programaobjetivo_proy", length = 1000)
    private String uzytavobjetivo_programaobjetivo_proy;

    @Column(name = "uzytavobjetivo_programatipo")
    private Long uzytavobjetivo_programatipo;

    //RELACIÓN CON PROYECTO-TABLA PADRE
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "uzytavproyec_id")
    private ModelUzyTavProyec uzytavproyec;


    //RELACIÓN CONSIGO MISMA

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "uzytavobjetivo_programa_id_padre", referencedColumnName = "uzytavobjetivo_programa_id")
    private ModelUzytavObjetivoPrograma uzytavobjetivo_programaPadre;


    @JsonIgnore
    @OneToMany(mappedBy = "uzytavobjetivo_programaPadre", cascade = CascadeType.ALL)
    private Set<ModelUzytavObjetivoPrograma> modelUzytavObjetivoProgramaSet = new LinkedHashSet<>();

    @Column(name = "uzytavobjetivo_programaorden")
    private Long uzytavobjetivo_programaorden;

    @Column(name = "uzytavobjetivo_programafec_ini")
    private LocalDate uzytavobjetivo_programafec_ini;

    @Column(name = "uzytavobjetivo_programafec_fin")
    private LocalDate uzytavobjetivo_programafec_fin;

    @Column(name = "uzytavobjetivo_programaindicador_tipo")
    private Long uzytavobjetivo_programaindicador_tipo;

    @Column(name = "uzytavobjetivo_programaindicador_valor")
    private Long uzytavobjetivo_programaindicador_valor;

    @Column(name = "uzytavobjetivo_programaindicador_valor_eje")
    private Long uzytavobjetivo_programaindicador_valor_eje;
    //RELACIÓN CON ModelUzyTavDetActproy TABLA HIJA
    @JsonIgnore
    @OneToMany(mappedBy = "uzytavobjetivoPrograma")
    private Set<ModelUzyTavDetActproy> modelUzyTavDetActproySet = new LinkedHashSet<>();

    //RELACIÓN CON ModelUzyTavSeguim TABLA HIJA
    @JsonIgnore
    @OneToMany(mappedBy = "uzytavobjetivoPrograma")
    private Set<ModelUzyTavSeguim> modelUzyTavSeguimSet = new LinkedHashSet<>();

}