package pe.edu.idat.model;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;

@Entity
@Table(name = "producto")
public class Producto {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer idproducto;
	
	@Column(name = "nombre", nullable = false, length = 25)
	private String nombre;
	
	@Column(name = "precio", nullable = false)
	private Double precio;
	
	@Column(name = "fecha", nullable = false, length = 10)
	private String fecha;
	
	@Column(name = "stock", nullable = false)
	private int stock;
	

	public Producto() {
		super();
	}

	
	public Producto(Integer idproducto, String nombre, Double precio, String fecha, int stock, Categoria categoria,
			Proveedor proveedor, Almacen almacen, List<Detalle_Venta> listadet_venta) {
		super();
		this.idproducto = idproducto;
		this.nombre = nombre;
		this.precio = precio;
		this.fecha = fecha;
		this.stock = stock;
		this.categoria = categoria;
		this.proveedor = proveedor;
		this.almacen = almacen;
		this.listadet_venta = listadet_venta;
	}


	public Integer getIdproducto() {
		return idproducto;
	}


	public void setIdproducto(Integer idproducto) {
		this.idproducto = idproducto;
	}


	public String getNombre() {
		return nombre;
	}


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


	public Double getPrecio() {
		return precio;
	}


	public void setPrecio(Double precio) {
		this.precio = precio;
	}


	public String getFecha() {
		return fecha;
	}


	public void setFecha(String fecha) {
		this.fecha = fecha;
	}


	public int getStock() {
		return stock;
	}


	public void setStock(int stock) {
		this.stock = stock;
	}





	@JsonBackReference
	@ManyToOne(cascade = CascadeType.MERGE)
	@JoinColumn(name = "idcategoria")
	private Categoria categoria;

	public Categoria getCategoria() {
		return categoria;
	}


	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}



	@JsonBackReference
	@ManyToOne(cascade = CascadeType.MERGE)
	@JoinColumn(name = "idproveedor")
	private Proveedor proveedor;

	public Proveedor getProveedor() {
		return proveedor;
	}


	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}


	@JsonBackReference
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "idalmacen")
	private Almacen almacen;

	
	public Almacen getAlmacen() {
		return almacen;
	}


	public void setAlmacen(Almacen almacen) {
		this.almacen = almacen;
	}





	@JsonManagedReference
	@OneToMany(mappedBy = "producto", cascade = CascadeType.ALL, orphanRemoval = true)
	private List<Detalle_Venta> listadet_venta = new ArrayList<Detalle_Venta>();


	public List<Detalle_Venta> getListadet_venta() {
		return listadet_venta;
	}


	public void setListadet_venta(List<Detalle_Venta> listadet_venta) {
		this.listadet_venta = listadet_venta;
	}

	
	
}