package de.hsadmin.mods.pac;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity(name = "Components")
@Table(name = "component")
@IdClass(ComponentId.class)
public class Component implements Serializable {
	
	private static final long serialVersionUID = 970709621200712794L;

	@Id
	@Column(name="basepacket_id", insertable=false, updatable=false)
	private long basePacId;

	@Id
	@Column(name="basecomponent_id", insertable=false, updatable=false)
	private long baseComponentId;
	
	@ManyToOne
	@JoinColumn(name="basepacket_id")
	private BasePac basePac;
	
	@ManyToOne
	@JoinColumn(name="basecomponent_id")
	private BaseComponent baseComponent;
	
	@Column(name = "min_quantity", columnDefinition = "integer")
	private int minimumQuantity;

	@Column(name = "max_quantity", columnDefinition = "integer")
	private int maximimumQuantity;

	@Column(name = "default_quantity", columnDefinition = "integer")
	private int defaultQuantity;

	@Column(name = "increment_quantity", columnDefinition = "integer")
	private int incrementQuantity;

	@Column(name = "include_quantity", columnDefinition = "integer")
	private int includedQuantity;

	@Column(name = "admin_only", columnDefinition = "boolean")
	private boolean adminOnly;

	public Component() {
	}

	public Component(BasePac basePac, BaseComponent baseComp, int min, int max,
			int def, int incr, int incl, boolean adminOnly) {
		this.setBasePacId(basePac.id());
		this.basePac = basePac;
		this.setBaseComponentId(baseComp.id());
		this.baseComponent = baseComp;
		this.minimumQuantity = min;
		this.maximimumQuantity = max;
		this.defaultQuantity = def;
		this.incrementQuantity = incr;
		this.includedQuantity = incl;
		this.adminOnly = adminOnly;
	}

	public BasePac getBasePac() {
		return basePac;
	}

	public void setBasePac(BasePac basePac) {
		this.setBasePacId(basePac.id());
		this.basePac = basePac;
	}

	public BaseComponent getBaseComponent() {
		return baseComponent;
	}

	public void setBaseComponent(BaseComponent baseComponent) {
		this.setBaseComponentId(baseComponent.id());
		this.baseComponent = baseComponent;
	}

	public int getMinimumQuantity() {
		return minimumQuantity;
	}

	public void setMinimumQuantity(int minimumQuantity) {
		this.minimumQuantity = minimumQuantity;
	}

	public int getMaximimumQuantity() {
		return maximimumQuantity;
	}

	public void setMaximimumQuantity(int maximimumQuantity) {
		this.maximimumQuantity = maximimumQuantity;
	}

	public int getDefaultQuantity() {
		return defaultQuantity;
	}

	public void setDefaultQuantity(int defiautoQuantity) {
		this.defaultQuantity = defiautoQuantity;
	}

	public int getIncrementQuantity() {
		return incrementQuantity;
	}

	public void setIncrementQuantity(int incrementQuantity) {
		this.incrementQuantity = incrementQuantity;
	}

	public int getIncludedQuantity() {
		return includedQuantity;
	}

	public void setIncludedQuantity(int includedQuantity) {
		this.includedQuantity = includedQuantity;
	}

	public boolean isAdminOnly() {
		return adminOnly;
	}

	public void setAdminOnly(boolean adminOnly) {
		this.adminOnly = adminOnly;
	}

	public void setBasePacId(long basePacId) {
		this.basePacId = basePacId;
	}

	public long getBasePacId() {
		return basePacId;
	}

	public void setBaseComponentId(long baseComponentId) {
		this.baseComponentId = baseComponentId;
	}

	public long getBaseComponentId() {
		return baseComponentId;
	}

}
