/*
 * Copyright (C) 2005-2008 L2J_JP / 2008-2013 L2J-SFJP
 * 
 * This file is part of L2J Server.
 * 
 * L2J Server is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * L2J Server is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package events.ChristmasTree;

import static com.l2jserver.gameserver.datatables.SkillData.*;

import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.event.LongTimeEvent;
import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;

/**
 * クリスマス見習いサンタ 2004 愛の証
 * @author  2006/12/05 Evolution鯖管理人　[GM] ちびにゃん http://l2je.ath.cx
 * @author  2010/07/23 JOJO  5802_Christmas/__init__.py を java に書き換え
 */
public class ChristmasTree extends LongTimeEvent
{
	private static final boolean USE_GETEFFECTS = true;
	
	private static final String qn = "ChristmasTree";

	// NPCs
	private static final int SANTA_TRAINEE_A	= 31863;	//見習いサンタ(初期村)
	private static final int SANTA_TRAINEE_B	= 31864;	//見習いサンタ

	// ITEMs
	private static final int ITEM_STAR_ORNAMENT		= 5556;	//ツリー装飾：スター x4
	private static final int ITEM_BEAD_ORNAMENT		= 5557;	//ツリー装飾：ボール x4
	private static final int ITEM_FIR_TREE_BRANCH	= 5558;	//ツリー装飾：小枝   x10
	private static final int ITEM_FLOWER_POT		= 5559;	//ツリー装飾：鉢     x1

	private static final int ITEM_CHRISTMAS_TREE			= 5560;	//クリスマス ツリー
	private static final int ITEM_SPECIAL_CHRISTMAS_TREE	= 5561;	//高級クリスマス ツリー

	private static class Reword
	{
		int chance;	// %
		int itemId;
		long quantity;
		
		Reword(int chance, int item, long qty)
		{
			this.chance = chance;
			this.itemId = item;
			this.quantity = qty;
		}
	}
	// OMAKE
	private static final Reword[] REWARDS1 = {
	/*	new Reword(chance%,item,qty)	*/
		new Reword( 10,  728, 10 ),	//  2,000A マナ ポーション
		new Reword( 10, 1539, 20 ),	//    900A 強化体力回復剤
		new Reword( 10, 6035, 10 ),	//  2,400A 魔法詠唱速度向上ポーション
		new Reword( 10, 1374,  8 ),	//  3,000A 高級移動速度向上ポーション
		new Reword( 10,  735, 10 ),	//  2,400A 攻撃速度向上ポーション
		new Reword( 10, 1540, 10 ),	// 10,000A 瞬間体力回復剤
		new Reword( 10, 1375,  4 ),	//  6,000A 高級攻撃速度向上ポーション
		new Reword( 10, 6036,  4 ),	//  6,000A 高級魔法詠唱速度向上ポーション
		new Reword( 99, 5234, 10 ),	// 10,000A ミステリアス ポーション
	};
	private static final Reword[] REWARDS2 = {
	/*	new Reword(chance%,item,qty)	*/
		new Reword(  1, 6660,  1 ),	//   616,000A クイーンアント リング
		new Reword(  2, 6662,  1 ),	//   870,000A コア リング
		new Reword(  3,  959,  1 ),	// 5,000,000A 武器強化スクロール：Sグレード
		new Reword(  4,  729,  1 ),	// 1,800,000A 武器強化スクロール：Aグレード
		new Reword(  5,  947,  1 ),	//   500,000A 武器強化スクロール：Bグレード
		new Reword(  6,  960,  1 ),	//   500,000A 防具強化スクロール：Sグレード
		new Reword(  7,  730,  1 ),	//   240,000A 防具強化スクロール：Aグレード
		new Reword(  8,  951,  1 ),	//   110,000A 武器強化スクロール：Cグレード
		new Reword(  9,  948,  1 ),	//    80,000A 防具強化スクロール：Bグレード
		new Reword( 10,  955,  1 ),	//    50,000A 武器強化スクロール：Dグレード
		new Reword( 11,  952,  1 ),	//    15,000A 防具強化スクロール：Cグレード
		new Reword( 14,  956,  1 ),	//     6,000A 防具強化スクロール：Dグレード
		new Reword( 99, 1458,100 ),	//       650A クリスタル：Dグレード
	};
	
	private static final int[] BUFFS =
	{
		getSkillHashCode(4262, 2), // クリスマス ウィンド ウォーク - 一定時間、移動速度が向上した状態。効力2
		getSkillHashCode(4263, 1), // クリスマス ヘイスト - 一時的に攻撃速度が向上します。効力1
		getSkillHashCode(4264, 1), // クリスマス エンパワー - 一時的に魔力が向上した状態。効力1
		getSkillHashCode(4265, 3), // クリスマス マイト - 一時的に攻撃力が向上した状態。効力3
		getSkillHashCode(4266, 3), // クリスマス シールド - 一時的に防御力が向上した状態。効力3
	};
	
	private void giveRandamReward(L2PcInstance player, Reword[] rewardTable)
	{
		int rnd = getRandom(100);
		for (Reword e : rewardTable)
		{
			if ((rnd -= e.chance) < 0)
			{
				giveItems(player, e.itemId, e.quantity);
				break;
			}
		}
	}
	
	private void handleCast(L2Npc npc, L2Character target, int skillHashCode)
	{
if (USE_GETEFFECTS) {{
		Skill skill = getSkill(skillHashCode);
		skill.applyEffects(npc, target);
		npc.broadcastPacket(new MagicSkillUse(npc, target, skill.getId(), skill.getLevel(), 0, 0));
}} else {{
		npc.doCast(getSkill(skillHashCode));
}}
	}
	
	private ChristmasTree(String name, String descr)
	{
		super(name, descr);
		
		addStartNpc(SANTA_TRAINEE_A);
		addStartNpc(SANTA_TRAINEE_B);
		addFirstTalkId(SANTA_TRAINEE_A);
		addFirstTalkId(SANTA_TRAINEE_B);
		addTalkId(SANTA_TRAINEE_A);
		addTalkId(SANTA_TRAINEE_B);
	}

	@Override
	public String onFirstTalk(L2Npc npc, L2PcInstance player)
	{
		switch (npc.getId())
		{
		case SANTA_TRAINEE_A: return "31863.htm";
		case SANTA_TRAINEE_B: return "31864.htm";
		}
		throw new AssertionError();
	}

	@Override
	public String onTalk(L2Npc npc, L2PcInstance player)
	{
		return "main.htm";
	}

	@Override
	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
	{
		String htmltext = event;

		switch (event)
		{
			case "1":
				// 景品と交換
				if (getQuestItemsCount(player, ITEM_STAR_ORNAMENT) >= 4
				 && getQuestItemsCount(player, ITEM_BEAD_ORNAMENT) >= 4
				 && getQuestItemsCount(player, ITEM_FIR_TREE_BRANCH) >= 10
				 && getQuestItemsCount(player, ITEM_FLOWER_POT) >= 1)
				{
					takeItems(player, ITEM_STAR_ORNAMENT,4);	//ツリー装飾：スター
					takeItems(player, ITEM_BEAD_ORNAMENT,4);	//ツリー装飾：ボール
					takeItems(player, ITEM_FIR_TREE_BRANCH,10);	//ツリー装飾：小枝
					takeItems(player, ITEM_FLOWER_POT,1);		//ツリー装飾：鉢
					
					giveItems(player, ITEM_CHRISTMAS_TREE,1);	//クリスマス ツリー
					giveRandamReward(player, REWARDS1);			//おまけ
					
					return "1OK.htm";
				}
				else
				{
					return "1NG.htm";
				}
				
			case "2":
				// 景品と交換
				if (getQuestItemsCount(player, ITEM_CHRISTMAS_TREE) >= 10)
				{
					takeItems(player, ITEM_CHRISTMAS_TREE,10);
					
					giveItems(player, ITEM_SPECIAL_CHRISTMAS_TREE,1);	//高級クリスマス ツリー
					giveRandamReward(player, REWARDS2);					//おまけ
					
					return "2OK.htm";
				}
				else
				{
					return "2NG.htm";
				}
				
			case "3":
				// 景品と交換
				if (getQuestItemsCount(player, ITEM_CHRISTMAS_TREE) >= 10)
				{
					takeItems(player, ITEM_CHRISTMAS_TREE,10);
				//	giveItems(player, 5555,1);		//2004愛の証
				//	giveItems(player, 7836,1);		//サンタ帽子
					giveItems(player, 8936,1);		//サンタのとんがり帽子
					return "3OK.htm";
				}
				else
				{
					return "3NG.htm";
				}
				
			case "0":
				// キャンセル
				htmltext = "Trade has been canceled.";
				break;
				
			case "SupportMagic":
				// 補助魔法
				for (int skill : BUFFS)
					handleCast(npc, player, skill);
				break;
		}
		
		return htmltext;
	}
	
	public static void main(String[] args)
	{
		new ChristmasTree(qn, "events");
	}
}