package com.dacrt.SBIABackend.entity;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;

import org.springframework.lang.NonNull;

import com.fasterxml.jackson.annotation.JsonBackReference;

@Entity
@Table(name = "unidad",schema = "original_data")
public class Unidad {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "idUnidad", length = 10)
	private int idUnidad;

	@NonNull
	@Column(name = "cdUnidad", length = 6, nullable = false, unique = true)
	private String cdUnidad;

	@NonNull
	@Column(name = "nombre", length = 200, nullable = false, unique = true)
	private String nombre;

	@NonNull
	@Column(name = "descripcion", length = 400, nullable = false)
	private String descripcion;

	@NonNull
	@Column(name = "activo", length = 1, nullable = false)
	private int activo;

	@NonNull
	@Column(name = "tipoClasificacion", length = 6, nullable = false)
	private int tipoClasificacion;

	@NonNull
	@Column(name = "usuario", length = 100, nullable = false)
	private String usuario;

	@NonNull
	@Column(name = "fechaRegistro", nullable = false)
	private Date fechaRegistro;

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

	/*@ManyToOne
	private LineaOperacion lineaOperacion;
	
	@ManyToOne
	private UbicacionesTi ubicacionesTi;*/
	
	@JsonBackReference
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "idUnidadAdscripcion", referencedColumnName = "idUnidadAdscripcion")
	private UnidadAdscripcion unidadAdscripcion;

	/*@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH)
	@JoinTable(name = "unidadProcesos", joinColumns = { @JoinColumn(name = "idUnidad") }, inverseJoinColumns = {
			@JoinColumn(name = "id_procesamiento") })*/
	//private Set<Proceso> procesos = new HashSet<>();

	public Unidad() {

	}

	/*public Unidad(int idUnidad, String cdUnidad, String nombre, String descripcion, int activo, int tipoClasificacion,
			String usuario, Date fechaRegistro, Date fechaModificacion, LineaOperacion lineaOperacion,UbicacionesTi ubicacionesTi, UnidadAdscripcion unidadAdscripcion,
			Set<Proceso> procesos) {*/
		public Unidad(int idUnidad, String cdUnidad, String nombre, String descripcion, int activo, int tipoClasificacion,
				String usuario, Date fechaRegistro, Date fechaModificacion, UnidadAdscripcion unidadAdscripcion) {	
		super();
		this.idUnidad = idUnidad;
		this.cdUnidad = cdUnidad;
		this.nombre = nombre;
		this.descripcion = descripcion;
		this.activo = activo;
		this.tipoClasificacion = tipoClasificacion;
		this.usuario = usuario;
		this.fechaRegistro = fechaRegistro;
		this.fechaModificacion = fechaModificacion;
		//this.lineaOperacion = lineaOperacion;
		//this.ubicacionesTi = ubicacionesTi;
		this.unidadAdscripcion = unidadAdscripcion;
	//	this.procesos = procesos;
	}

	public int getIdUnidad() {
		return idUnidad;
	}

	public void setIdUnidad(int idUnidad) {
		this.idUnidad = idUnidad;
	}

	public String getCdUnidad() {
		return cdUnidad;
	}

	public void setCdUnidad(String cdUnidad) {
		this.cdUnidad = cdUnidad;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public int getActivo() {
		return activo;
	}

	public void setActivo(int activo) {
		this.activo = activo;
	}

	public int getTipoClasificacion() {
		return tipoClasificacion;
	}

	public void setTipoClasificacion(int tipoClasificacion) {
		this.tipoClasificacion = tipoClasificacion;
	}

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public Date getFechaRegistro() {
		return fechaRegistro;
	}

	public void setFechaRegistro(Date fechaRegistro) {
		this.fechaRegistro = fechaRegistro;
	}

	public Date getFechaModificacion() {
		return fechaModificacion;
	}

	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public UnidadAdscripcion getUnidadAdscripcion() {
		return unidadAdscripcion;
	}

	public void setUnidadAdscripcion(UnidadAdscripcion unidadAdscripcion) {
		this.unidadAdscripcion = unidadAdscripcion;
	}

	/*public Set<Proceso> getProcesos() {
		return procesos;
	}

	public void setProcesos(Set<Proceso> procesos) {
		this.procesos = procesos;
	}

	public UbicacionesTi getUbicacionesTi() {
		return ubicacionesTi;
	}

	public void setUbicacionesTi(UbicacionesTi ubicacionesTi) {
		this.ubicacionesTi = ubicacionesTi;
	}*/
}
