/*
 * This program 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.
 * 
 * This program 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.util.EventNpcAligner.alignRight;

import com.l2jserver.gameserver.instancemanager.QuestManager;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;

/**
 * クリスマス見習いサンタ 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 Quest
{
	private static final String qn = "ChristmasTree";

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

	//ITEM
	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;	//高級クリスマス ツリー

	//OMAKE
	private static final int[][] REWARDS1 = {
	/*	{chance%,item,qty}	*/
		{ 10,  728, 10 },	//  2,000A マナ ポーション
		{ 10, 1539, 20 },	//    900A 強化体力回復剤
		{ 10, 6035, 10 },	//  2,400A 魔法詠唱速度向上ポーション
		{ 10, 1374,  8 },	//  3,000A 高級移動速度向上ポーション
		{ 10,  735, 10 },	//  2,400A 攻撃速度向上ポーション
		{ 10, 1540, 10 },	// 10,000A 瞬間体力回復剤
		{ 10, 1375,  4 },	//  6,000A 高級攻撃速度向上ポーション
		{ 10, 6036,  4 },	//  6,000A 高級魔法詠唱速度向上ポーション
		{ 99, 5234, 10 },	// 10,000A ミステリアス ポーション
	};
	private static final int[][] REWARDS2 = {
	/*	{chance%,item,qty}	*/
		{  1, 6660,  1 },	//   616,000A クイーンアント リング
		{  2, 6662,  1 },	//   870,000A コア リング
		{  3,  959,  1 },	// 5,000,000A 武器強化スクロール：Sグレード
		{  4,  729,  1 },	// 1,800,000A 武器強化スクロール：Aグレード
		{  5,  947,  1 },	//   500,000A 武器強化スクロール：Bグレード
		{  6,  960,  1 },	//   500,000A 防具強化スクロール：Sグレード
		{  7,  730,  1 },	//   240,000A 防具強化スクロール：Aグレード
		{  8,  951,  1 },	//   110,000A 武器強化スクロール：Cグレード
		{  9,  948,  1 },	//    80,000A 防具強化スクロール：Bグレード
		{ 10,  955,  1 },	//    50,000A 武器強化スクロール：Dグレード
		{ 11,  952,  1 },	//    15,000A 防具強化スクロール：Cグレード
		{ 14,  956,  1 },	//     6,000A 防具強化スクロール：Dグレード
		{ 99, 1458,100 },	//       650A クリスタル：Dグレード
	};

	// 31863 見習いサンタA 補助魔法あり 初期村配置
	// 31864 見習いサンタB 補助魔法なし 他の村配置
	private static final int[][] _spawns =
	{
		{ SANTA_TRAINEE_A,  -84447,  243153, -3733, 25486 },	//TI Village
		{ SANTA_TRAINEE_A,   43595,   50573, -3000, 29728 },	//Elven Village
		{ SANTA_TRAINEE_A,   10693,   17022, -4589, 64337 },	//Dark Elven Village
		{ SANTA_TRAINEE_A,  -44579, -113607,  -203,   307 },	//Orc Village
		{ SANTA_TRAINEE_A,  115440, -179306,  -926, 10201 },	//Dwarf Village
		{ SANTA_TRAINEE_A, -117509,   44972,   362, 16384 },	//Kamael Village
		{ SANTA_TRAINEE_B,  -80991,  150835, -3048, 31288 },	//Gludin
		{ SANTA_TRAINEE_B,  -14255,  122508, -3121, 16037 },	//Gludio
		{ SANTA_TRAINEE_B,   18725,  144297, -3074, 11548 },	//Dion
		{ SANTA_TRAINEE_B,   82171,  148605, -3471, 62980 },	//Giran
		{ SANTA_TRAINEE_B,  110314,  219478, -3484, 41214 },	//Heine
		{ SANTA_TRAINEE_B,  116232,   75560, -2716, 11165 },	//Hunter
		{ SANTA_TRAINEE_B,   81118,   55375, -1529, 32768 },	//Oren
		{ SANTA_TRAINEE_B,  147178,   26523, -2209,  8887 },	//Aden
		{ SANTA_TRAINEE_B,   43755,  -47678,  -801, 47997 },	//Rune
		{ SANTA_TRAINEE_B,  147399,  -55917, -2770, 55163 },	//Goddard
		{ SANTA_TRAINEE_B,   87238, -141443, -1345, 57540 },	//Schuttgart
	};

	private void giveRandamReward(QuestState st, int[][] rewardTable)
	{
		int rnd = st.getRandom(100);
		for (int[] e : rewardTable)
		{
			if ((rnd -= e[0]) < 0)
			{
				for (int i = 1; i < e.length; i+=2)
					st.giveItems(e[i + 0], e[i + 1]);
				break;
			}
		}
	}

	private ChristmasTree(int questId, String name, String descr)
	{
		super(questId, 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);
		
		for(int[] spawn : _spawns)
			alignRight(addSpawn(spawn[0], spawn[1], spawn[2], spawn[3], spawn[4], false, 0));
	}

	@Override
	public String onFirstTalk(L2Npc npc, L2PcInstance player)
	{
		QuestState st = player.getQuestState(getName());
		if (st == null)
		{
			Quest q = QuestManager.getInstance().getQuest(getName());
			st = q.newQuestState(player);
		}
		switch (npc.getNpcId())
		{
		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 onEvent(String event, QuestState st)
	{
		String htmltext = event;

		//景品と交換
		if (event.equals("1"))
		{
			if (st.getQuestItemsCount(ITEM_STAR_ORNAMENT) >= 4
			 && st.getQuestItemsCount(ITEM_BEAD_ORNAMENT) >= 4
			 && st.getQuestItemsCount(ITEM_FIR_TREE_BRANCH) >= 10
			 && st.getQuestItemsCount(ITEM_FLOWER_POT) >= 1)
			{
				st.takeItems(ITEM_STAR_ORNAMENT,4);		//ツリー装飾：スター
				st.takeItems(ITEM_BEAD_ORNAMENT,4);		//ツリー装飾：ボール
				st.takeItems(ITEM_FIR_TREE_BRANCH,10);	//ツリー装飾：小枝
				st.takeItems(ITEM_FLOWER_POT,1);		//ツリー装飾：鉢
				
				st.giveItems(ITEM_CHRISTMAS_TREE,1);		//クリスマス ツリー
				giveRandamReward(st, REWARDS1);				//おまけ
				
				return "1OK.htm";
			}
			else
			{
				return "1NG.htm";
			}
		}
		else if (event.equals("2"))
		{
			if (st.getQuestItemsCount(ITEM_CHRISTMAS_TREE) >= 10)
			{
				st.takeItems(ITEM_CHRISTMAS_TREE,10);
				
				st.giveItems(ITEM_SPECIAL_CHRISTMAS_TREE,1);	//高級クリスマス ツリー
				giveRandamReward(st, REWARDS2);					//おまけ
				
				return "2OK.htm";
			}
			else
			{
				return "2NG.htm";
			}
		}
		else if (event.equals("3"))
		{
			if (st.getQuestItemsCount(ITEM_CHRISTMAS_TREE) >= 10)
			{
				st.takeItems(ITEM_CHRISTMAS_TREE,10);
			//	st.giveItems(5555,1);		//2004愛の証
			//	st.giveItems(7836,1);		//サンタ帽子
				st.giveItems(8936,1);		//サンタのとんがり帽子
				return "3OK.htm";
			}
			else
			{
				return "3NG.htm";
			}
		}
		else if (event.equals("0"))
		{
			htmltext = "Trade has been canceled.";
		}
		
		return htmltext;
	}

	public static void main(String[] args)
	{
		new ChristmasTree(-1, qn, "events");
	}
}