package com.aionemu.gameserver.model.templates.housing;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;

/**
 * @author Rolandas
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PlaceableHouseObject")
@XmlSeeAlso({ HousingJukeBox.class, HousingPicture.class, HousingPostbox.class, HousingChair.class, HousingStorage.class, HousingNpc.class,
	HousingMoveableItem.class, HousingUseableItem.class, HousingPassiveItem.class, HousingEmblem.class })
public abstract class PlaceableHouseObject extends AbstractHouseObject {

	@XmlAttribute(name = "use_days")
	protected Integer useDays;

	@XmlAttribute
	protected LimitType limit;

	@XmlAttribute
	protected PlaceLocation location;

	@XmlAttribute
	protected PlaceArea area;

	/**
	 * Gets the value of the useDays property.
	 * 
	 * @return null if not restricted
	 */
	public int getUseDays() {
		if (useDays == null)
			return 0;
		return useDays;
	}

	/**
	 * Where the object is allowed to be placed on?
	 * <p>
	 * <tt>TODO: check if it is needed and not handled by the client</tt>
	 * 
	 * @return {@link LimitType.NONE} if no restriction
	 */
	public LimitType getPlacementLimit() {
		if (limit == null)
			return LimitType.NONE;
		return limit;
	}

	/**
	 * How the object is allowed to be placed (stacks, ground, wall) ?
	 * <p>
	 * <tt>TODO: check if it is needed and not handled by the client</tt>
	 * 
	 * @return possible object is {@link PlaceLocation }
	 */
	public PlaceLocation getLocation() {
		return location;
	}

	/**
	 * Environment where the object is allowed to be placed (interior, exterior)
	 * <p>
	 * <tt>TODO: check if it is needed and not handled by the client</tt>
	 * 
	 * @return possible object is {@link PlaceArea }
	 */
	public PlaceArea getArea() {
		return area;
	}

	public abstract byte getTypeId();

}
