class ActionCookOnStickCB : ActionContinuousBaseCB
{
	private const float COOKING_ON_STICK_UPDATE_TIME = 1;
	
	override void CreateActionComponent()
	{
		m_ActionData.m_ActionComponent = new CAContinuousTimeCooking( COOKING_ON_STICK_UPDATE_TIME );
	}
};

class ActionCookOnStick: ActionContinuousBase
{
	void ActionCookOnStick()
	{
		m_CallbackClass 	= ActionCookOnStickCB;
		m_CommandUID 		= DayZPlayerConstants.CMD_GESTUREFB_CAMPFIRE;
		m_FullBody 			= true;
		m_StanceMask 		= DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT;
		m_SpecialtyWeight 	= UASoftSkillsWeight.ROUGH_LOW;
		
		m_LockTargetOnUse 	= false;
		m_Text 				= "#cook_on_stick";
	}
	
	override void CreateConditionComponents()  
	{	
		m_ConditionTarget	= new CCTNonRuined(UAMaxDistances.DEFAULT);
		m_ConditionItem		= new CCINonRuined;
	}

	override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
	{
		FireplaceBase fireplace_target = FireplaceBase.Cast(target.GetObject());
		Object targetObject = target.GetObject();
		Edible_Base item_on_stick = Edible_Base.Cast(item.GetAttachmentByType(Edible_Base));
		if (fireplace_target && fireplace_target.CanCookOnStick() && item_on_stick && item_on_stick.CanBeCookedOnStick())
		{
			//fireplace
			if (fireplace_target.IsBaseFireplace())
			{
				Fireplace fireplace = Fireplace.Cast(fireplace_target);
				if (fireplace && fireplace.IsOven())
					return false;
				
				if (fireplace_target.CanCookOnStick()) 
					return true;
			}
			
			//fireplace indoor
			if (fireplace_target.IsFireplaceIndoor())
			{
				if (fireplace_target.CanCookOnStick()) 
					return true;
			}
		}
		
		return false;
	}
	
	override void OnEndServer(ActionData action_data)
	{
		super.OnEndServer(action_data);
		
		ItemBase stick = action_data.m_MainItem;
		Edible_Base item_on_stick = Edible_Base.Cast(stick.GetAttachmentByType(Edible_Base));

		if (item_on_stick)
		{
			item_on_stick.MakeSoundsOnClient(false);
		}
	}
};