package com.dacrt.SBIABackend.security.entity;

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

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.Table;
import javax.validation.constraints.NotNull;

import org.springframework.lang.NonNull;
import org.springframework.web.bind.annotation.CrossOrigin;

import com.dacrt.SBIABackend.entity.Suppliers;
import com.dacrt.SBIABackend.entity.Workers;

//import com.dacrt.SBIABackend.entity.Unidad;

@CrossOrigin(origins = "*")
@Entity
@Table(name = "users",schema = "main")
public class Users {
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	@NotNull
	private String name;
	@NotNull
	@Column (unique = true)
	private String usr;
	@NotNull
	@Column (unique = true)
	private String email;
	@Column(updatable=false)
	private String pwd;
	@Column(updatable=false)
	private String sessionid;
	@Column(updatable=false)
	private Date validthru;
	@Column(updatable=false)
	private Date lastsession;
	@NotNull
	@Column(columnDefinition = "int4 not null default 1")
	private int status;
	@NotNull
	@Column(columnDefinition = "int4 not null default 0")
	private int fails;
	@NonNull
	@Column(columnDefinition = "timestamp without time zone NOT NULL default now()")
	private Date createdat;
	@NonNull
	@Column(columnDefinition = "timestamp without time zone NOT NULL default now()")
	private Date modifiedat;
	@Column(updatable=false)
	private Date lastpwdchange;
	@Column(updatable=false)
	private String oldpwds;
	//@NotNull
	//private int rolid;
	
	//private int workerid;
	@ManyToOne
    @JoinColumn(name = "workerid")
	private Workers workerid;
	
	//private int supplierid;
	@ManyToOne
    @JoinColumn(name = "supplierid")
    private Suppliers supplierid;
	
	@ManyToOne
    @JoinColumn(name = "rolid")
    private Roles rolid;
	
	public Users() {
	}

	/*public Users(@NotNull String nombre, @NotNull String usuario, @NotNull String email, @NotNull String password,
			@NotNull Set<Unidad> unidad,String codEmpleado) {
		super();
		this.nombre = nombre;
		this.usuario = usuario;
		this.email = email;
		this.password = password;
		this.unidad = unidad;
		this.codEmpleado = codEmpleado;
	}*/

	/*public Users(@NotNull String name, @NotNull String usr, @NotNull String email, @NotNull String pwd,@NotNull String sessionid,
		 @NotNull Date validthru,@NotNull Date lastsession,Integer status,Integer fails,@NotNull Date createdat,
		 @NotNull Date modifiedat,Date lastpwdchange,@NotNull Set<Unidad> unidad,@NotNull Set<Rol> roles,@NotNull String oldpwds) {
		super();*/

	public Users(int id, @NotNull String name, @NotNull String usr, @NotNull String email, @NotNull String pwd,
			@NotNull String sessionid, Date validthru, Date lastsession, @NotNull int status, @NotNull int fails,
			Date createdat, Date modifiedat, @NotNull Date lastpwdchange, @NotNull String oldpwds, @NotNull Roles rolid,
			Workers workerid, Suppliers supplierid) {
		super();
		this.id = id;
		this.name = name;
		this.usr = usr;
		this.email = email;
		this.pwd = pwd;
		this.sessionid = sessionid;
		this.validthru = validthru;
		this.lastsession = lastsession;
		this.status = status;
		this.fails = fails;
		this.createdat = createdat;
		this.modifiedat = modifiedat;
		this.lastpwdchange = lastpwdchange;
		this.oldpwds = oldpwds;
		this.rolid = rolid;
		this.workerid = workerid;
		this.supplierid = supplierid;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public String getSessionid() {
		return sessionid;
	}

	public void setSessionid(String sessionid) {
		this.sessionid = sessionid;
	}

	public String getUsr() {
		return usr;
	}

	public void setUsr(String usr) {
		this.usr = usr;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public Date getValidthru() {
		return validthru;
	}

	public void setValidthru(Date validthru) {
		this.validthru = validthru;
	}
	
	public Date getLastsession() {
		return lastsession;
	}

	public void setLastsession(Date lastsession) {
		this.lastsession = lastsession;
	}
	
	public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}
	
	public int getFails() {
		return fails;
	}

	public void setFails(int fails) {
		this.fails = fails;
	}
	
	public Date getCreatedat() {
		return createdat;
	}

	public void setCreatedat(Date createdat) {
		this.createdat = createdat;
	}
	
	public Date getModifiedat() {
		return modifiedat;
	}

	public void setModifiedat(Date modifiedat) {
		this.modifiedat = modifiedat;
	}

	public Date getLastpwdchange() {
		return lastpwdchange;
	}

	public void setLastpwdchange(Date lastpwdchange) {
		this.lastpwdchange = lastpwdchange;
	}
	
/*	public Set<Unidad> getUnidad() {
		return unidad;
	}

	public void setUnidad(Set<Unidad> unidad) {
		this.unidad = unidad;
	}

	public Set<Rol> getRoles() {
		return roles;
	}

	public void setRoles(Set<Rol> roles) {
		this.roles = roles;
	}*/
	
	public String getOldpwds() {
		return oldpwds;
	}

	public void setOldpwds(String oldpwds) {
		this.oldpwds = oldpwds;
	}

	public Roles getRolid() {
		return rolid;
	}

	public void setRolid(Roles rolid) {
		this.rolid = rolid;
	}

	public Workers getWorkerid() {
		return workerid;
	}

	public void setWorkerid(Workers workerid) {
		this.workerid = workerid;
	}

	public Suppliers getSupplierid() {
		return supplierid;
	}

	public void setSupplierid(Suppliers supplierid) {
		this.supplierid = supplierid;
	}
	
	
}