package com.sun.jpa.dfw;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.inject.Named;
import javax.persistence.*;
import java.util.Date;
import java.util.List;


/**
 * The persistent class for the USERS database table.
 * 
 */
@Entity
@Table(name="USERS")
@Named(value="users")
@ManagedBean(name="users")
@NamedQueries({
    @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u"),
    @NamedQuery(name = "User.findById", query = "SELECT u FROM User u WHERE u.id = :id"),
    @NamedQuery(name = "User.findByUserId", query = "SELECT u FROM User u WHERE u.userId = :userId"),
    @NamedQuery(name = "User.findByPassword", query = "SELECT u FROM User u WHERE u.password = :password"),
    @NamedQuery(name = "User.findByFirstName", query = "SELECT u FROM User u WHERE u.firstName = :firstName"),
    @NamedQuery(name = "User.findByLastName", query = "SELECT u FROM User u WHERE u.lastName = :lastName"),
    @NamedQuery(name = "User.findByCreatedBy", query = "SELECT u FROM User u WHERE u.createdBy = :createdBy"),
    @NamedQuery(name = "User.findByCreatedTime", query = "SELECT u FROM User u WHERE u.createdTime = :createdTime")})
public class User implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="ID")
	private int id;

	@Column(name="CREATED_BY")
	private int createdBy;

    @Temporal( TemporalType.TIMESTAMP)
	@Column(name="CREATED_TIME")
	private Date createdTime;

	@Column(name="FIRST_NAME")
	private String firstName;

	@Column(name="LAST_NAME")
	private String lastName;

	@Column(name="PASSWORD")
	private String password;

	@Column(name="USER_ID")
	private String userId;

	//bi-directional many-to-one association to Buyer
	@OneToMany(mappedBy="user")
	private List<Buyer> buyers;

	//bi-directional many-to-one association to GeneralTask
	@OneToMany(mappedBy="user1")
	private List<GeneralTask> generalTasks1;

	//bi-directional many-to-one association to GeneralTask
	@OneToMany(mappedBy="user2")
	private List<GeneralTask> generalTasks2;

	//bi-directional many-to-one association to Landlord
	@OneToMany(mappedBy="user")
	private List<Landlord> landlords;

	//bi-directional many-to-one association to Listing
	@OneToMany(mappedBy="user1")
	private List<Listing> listings1;

	//bi-directional many-to-one association to Listing
	@OneToMany(mappedBy="user2")
	private List<Listing> listings2;

	//bi-directional many-to-one association to Renter
	@OneToMany(mappedBy="user")
	private List<Renter> renters;

	//bi-directional many-to-one association to Seller
	@OneToMany(mappedBy="user")
	private List<Seller> sellers;

	//bi-directional many-to-one association to Task
	@OneToMany(mappedBy="user1")
	private List<Task> tasks1;

	//bi-directional many-to-one association to Task
	@OneToMany(mappedBy="user2")
	private List<Task> tasks2;

	//bi-directional many-to-one association to Level
    @ManyToOne
	@JoinColumn(name="LEVEL_ID")
	private Level level;

    
    @PersistenceContext 
    EntityManager em;
    
    public User() {
    }

	public int getId() {
		return this.id;
	}

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

	public int getCreatedBy() {
		return this.createdBy;
	}

	public void setCreatedBy(int createdBy) {
		this.createdBy = createdBy;
	}

	public Date getCreatedTime() {
		return this.createdTime;
	}

	public void setCreatedTime(Date createdTime) {
		this.createdTime = createdTime;
	}

	public String getFirstName() {
		return this.firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return this.lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUserId() {
		return this.userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public List<Buyer> getBuyers() {
		return this.buyers;
	}

	public void setBuyers(List<Buyer> buyers) {
		this.buyers = buyers;
	}
	
	public List<GeneralTask> getGeneralTasks1() {
		return this.generalTasks1;
	}

	public void setGeneralTasks1(List<GeneralTask> generalTasks1) {
		this.generalTasks1 = generalTasks1;
	}
	
	public List<GeneralTask> getGeneralTasks2() {
		return this.generalTasks2;
	}

	public void setGeneralTasks2(List<GeneralTask> generalTasks2) {
		this.generalTasks2 = generalTasks2;
	}
	
	public List<Landlord> getLandlords() {
		return this.landlords;
	}

	public void setLandlords(List<Landlord> landlords) {
		this.landlords = landlords;
	}
	
	public List<Listing> getListings1() {
		return this.listings1;
	}

	public void setListings1(List<Listing> listings1) {
		this.listings1 = listings1;
	}
	
	public List<Listing> getListings2() {
		return this.listings2;
	}

	public void setListings2(List<Listing> listings2) {
		this.listings2 = listings2;
	}
	
	public List<Renter> getRenters() {
		return this.renters;
	}

	public void setRenters(List<Renter> renters) {
		this.renters = renters;
	}
	
	public List<Seller> getSellers() {
		return this.sellers;
	}

	public void setSellers(List<Seller> sellers) {
		this.sellers = sellers;
	}
	
	public List<Task> getTasks1() {
		return this.tasks1;
	}

	public void setTasks1(List<Task> tasks1) {
		this.tasks1 = tasks1;
	}
	
	public List<Task> getTasks2() {
		return this.tasks2;
	}

	public void setTasks2(List<Task> tasks2) {
		this.tasks2 = tasks2;
	}
	
	public Level getLevel() {
		return this.level;
	}

	public void setLevel(Level level) {
		this.level = level;
	}
	
	
	public String loginUser()
	{
		System.out.println("This is called..");
		System.out.println("Username is set to :"+userId);
		System.out.println("Password is set to :"+password);
		Query query=em.createNamedQuery("User.findByUserId").setParameter("userId", userId);
		List usersList=query.getResultList();
		if(usersList ==null || usersList.size() ==0)
		{
			System.out.println("Users not found:");
			throw new RuntimeException("Users not found");
		}
		return "pass";
		
	}
}