/*
 * Copyright (C) 2004-2014 L2J DataPack
 * 
 * This file is part of L2J DataPack.
 * 
 * L2J DataPack 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 DataPack 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 quests.Q00408_PathOfTheElvenWizard;

import com.l2jserver.gameserver.enums.QuestSound;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.serverpackets.SocialAction;
import com.l2jserver.gameserver.util.Util;

/**
 * Path Of The Elven Wizard (408)
 * @author ivantotov
 */
public final class Q00408_PathOfTheElvenWizard extends Quest
{
	// NPCs
	private static final int ROSSELA = 30414;
	private static final int GREENIS = 30157;
	private static final int THALIA = 30371;
	private static final int NORTHWIND = 30423;
	// Items
	private static final int ROSELLAS_LETTER = 1218;
	private static final int RED_DOWN = 1219;
	private static final int MAGICAL_POWERS_RUBY = 1220;
	private static final int PURE_AQUAMARINE = 1221;
	private static final int APPETIZING_APPLE = 1222;
	private static final int GOLD_LEAVES = 1223;
	private static final int IMMORTAL_LOVE = 1224;
	private static final int AMETHYST = 1225;
	private static final int NOBILITY_AMETHYST = 1226;
	private static final int FERTILITY_PERIDOT = 1229;
	private static final int GREENISS_CHARM = 1272;
	private static final int SAP_OF_THE_MOTHER_TREE = 1273;
	private static final int LUCKY_POTPOURRI = 1274;
	// Reward
	private static final int ETERNITY_DIAMOND = 1230;
	// Monster
	private static final int DRYAD_ELDER = 20019;
	private static final int SUKAR_WERERAT_LEADER = 20047;
	private static final int PINCER_SPIDER = 20466;
	// Misc
	private static final int MIN_LEVEL = 18;
	
	public Q00408_PathOfTheElvenWizard()
	{
		super(408, Q00408_PathOfTheElvenWizard.class.getSimpleName(), "エルヴン ウィザードになる道");
		addStartNpc(ROSSELA);
		addTalkId(ROSSELA, GREENIS, THALIA, NORTHWIND);
		addKillId(DRYAD_ELDER, SUKAR_WERERAT_LEADER, PINCER_SPIDER);
		registerQuestItems(ROSELLAS_LETTER, RED_DOWN, MAGICAL_POWERS_RUBY, PURE_AQUAMARINE, APPETIZING_APPLE, GOLD_LEAVES, IMMORTAL_LOVE, AMETHYST, NOBILITY_AMETHYST, FERTILITY_PERIDOT, GREENISS_CHARM, SAP_OF_THE_MOTHER_TREE, LUCKY_POTPOURRI);
	}
	
	@Override
	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
	{
		final QuestState qs = getQuestState(player, false);
		if (qs == null)
		{
			return null;
		}
		
		String htmltext = null;
		switch (event)
		{
			case "ACCEPT":
			{
				if (player.getClassId() != ClassId.elvenMage)
				{
					if (player.getClassId() == ClassId.elvenWizard)
					{
						htmltext = "30414-02a.htm";
					}
					else
					{
						htmltext = "30414-03.htm";
					}
				}
				else if (player.getLevel() < MIN_LEVEL)
				{
					htmltext = "30414-04.htm";
				}
				else if (hasQuestItems(player, ETERNITY_DIAMOND))
				{
					htmltext = "30414-05.htm";
				}
				else
				{
					if (!hasQuestItems(player, FERTILITY_PERIDOT))
					{
						giveItems(player, FERTILITY_PERIDOT, 1);
					}
					qs.startQuest();
					htmltext = "30414-06.htm";
				}
				break;
			}
			case "30414-02.htm":
			{
				htmltext = event;
				break;
			}
			case "30414-10.html":
			{
				if (hasQuestItems(player, MAGICAL_POWERS_RUBY))
				{
					htmltext = event;
				}
				else if (!hasQuestItems(player, MAGICAL_POWERS_RUBY) && hasQuestItems(player, FERTILITY_PERIDOT))
				{
					if (!hasQuestItems(player, ROSELLAS_LETTER))
					{
						giveItems(player, ROSELLAS_LETTER, 1);
					}
					htmltext = "30414-07.html";
				}
				break;
			}
			case "30414-12.html":
			{
				if (hasQuestItems(player, PURE_AQUAMARINE))
				{
					htmltext = event;
				}
				else if (!hasQuestItems(player, PURE_AQUAMARINE) && hasQuestItems(player, FERTILITY_PERIDOT))
				{
					if (!hasQuestItems(player, APPETIZING_APPLE))
					{
						giveItems(player, APPETIZING_APPLE, 1);
					}
					htmltext = "30414-13.html";
				}
				break;
			}
			case "30414-16.html":
			{
				if (hasQuestItems(player, NOBILITY_AMETHYST))
				{
					htmltext = event;
				}
				else if (!hasQuestItems(player, NOBILITY_AMETHYST) && hasQuestItems(player, FERTILITY_PERIDOT))
				{
					if (!hasQuestItems(player, IMMORTAL_LOVE))
					{
						giveItems(player, IMMORTAL_LOVE, 1);
					}
					htmltext = "30414-17.html";
				}
				break;
			}
			case "30157-02.html":
			{
				if (hasQuestItems(player, ROSELLAS_LETTER))
				{
					takeItems(player, ROSELLAS_LETTER, 1);
					if (!hasQuestItems(player, GREENISS_CHARM))
					{
						giveItems(player, GREENISS_CHARM, 1);
					}
				}
				htmltext = event;
				break;
			}
			case "30371-02.html":
			{
				if (hasQuestItems(player, APPETIZING_APPLE))
				{
					takeItems(player, APPETIZING_APPLE, 1);
					if (!hasQuestItems(player, SAP_OF_THE_MOTHER_TREE))
					{
						giveItems(player, SAP_OF_THE_MOTHER_TREE, 1);
					}
				}
				htmltext = event;
				break;
			}
		}
		return htmltext;
	}
	
	@Override
	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
	{
		final QuestState qs = getQuestState(killer, false);
		if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true))
		{
			switch (npc.getId())
			{
				case DRYAD_ELDER:
				{
					if (hasQuestItems(killer, SAP_OF_THE_MOTHER_TREE) && (getQuestItemsCount(killer, GOLD_LEAVES) < 5) && (getRandom(100) < 40))
					{
						giveItems(killer, GOLD_LEAVES, 1);
						if (getQuestItemsCount(killer, GOLD_LEAVES) == 5)
						{
							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
						}
						else
						{
							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
						}
					}
					break;
				}
				case SUKAR_WERERAT_LEADER:
				{
					if (hasQuestItems(killer, LUCKY_POTPOURRI) && (getQuestItemsCount(killer, AMETHYST) < 2) && (getRandom(100) < 40))
					{
						giveItems(killer, AMETHYST, 1);
						if (getQuestItemsCount(killer, AMETHYST) == 2)
						{
							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
						}
						else
						{
							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
						}
					}
					break;
				}
				case PINCER_SPIDER:
				{
					if (hasQuestItems(killer, GREENISS_CHARM) && (getQuestItemsCount(killer, RED_DOWN) < 5) && (getRandom(100) < 70))
					{
						giveItems(killer, RED_DOWN, 1);
						if (getQuestItemsCount(killer, RED_DOWN) == 5)
						{
							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE);
						}
						else
						{
							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
						}
					}
					break;
				}
			}
		}
		return super.onKill(npc, killer, isSummon);
	}
	
	@Override
	public String onTalk(L2Npc npc, L2PcInstance player)
	{
		final QuestState qs = getQuestState(player, true);
		String htmltext = getNoQuestMsg(player);
		if (qs.isCreated() || qs.isCompleted())
		{
			if (npc.getId() == ROSSELA)
			{
				htmltext = "30414-01.htm";
			}
		}
		else if (qs.isStarted())
		{
			switch (npc.getId())
			{
				case ROSSELA:
				{
					if (!hasAtLeastOneQuestItem(player, ROSELLAS_LETTER, APPETIZING_APPLE, IMMORTAL_LOVE, GREENISS_CHARM, SAP_OF_THE_MOTHER_TREE, LUCKY_POTPOURRI) && hasQuestItems(player, FERTILITY_PERIDOT) && !hasQuestItems(player, MAGICAL_POWERS_RUBY, NOBILITY_AMETHYST, PURE_AQUAMARINE))
					{
						htmltext = "30414-11.html";
					}
					else if (hasQuestItems(player, ROSELLAS_LETTER))
					{
						htmltext = "30414-08.html";
					}
					else if (hasQuestItems(player, GREENISS_CHARM))
					{
						if (getQuestItemsCount(player, RED_DOWN) < 5)
						{
							htmltext = "30414-09.html";
						}
						else
						{
							htmltext = "30414-21.html";
						}
					}
					else if (hasQuestItems(player, APPETIZING_APPLE))
					{
						htmltext = "30414-14.html";
					}
					else if (hasQuestItems(player, SAP_OF_THE_MOTHER_TREE))
					{
						if (getQuestItemsCount(player, GOLD_LEAVES) < 5)
						{
							htmltext = "30414-15.html";
						}
						else
						{
							htmltext = "30414-22.html";
						}
					}
					else if (hasQuestItems(player, IMMORTAL_LOVE))
					{
						htmltext = "30414-18.html";
					}
					else if (hasQuestItems(player, LUCKY_POTPOURRI))
					{
						if (getQuestItemsCount(player, AMETHYST) < 2)
						{
							htmltext = "30414-19.html";
						}
						else
						{
							htmltext = "30414-23.html";
						}
					}
					else
					{
						if (!hasAtLeastOneQuestItem(player, ROSELLAS_LETTER, APPETIZING_APPLE, IMMORTAL_LOVE, GREENISS_CHARM, SAP_OF_THE_MOTHER_TREE, LUCKY_POTPOURRI) && hasQuestItems(player, FERTILITY_PERIDOT, MAGICAL_POWERS_RUBY, NOBILITY_AMETHYST, PURE_AQUAMARINE))
						{
							giveAdena(player, 163800, true);
							if (!hasQuestItems(player, ETERNITY_DIAMOND))
							{
								giveItems(player, ETERNITY_DIAMOND, 1);
							}
							final int level = player.getLevel();
							if (level >= 20)
							{
								addExpAndSp(player, 320534, 22532);
							}
							else if (level == 19)
							{
								addExpAndSp(player, 456128, 29230);
							}
							else
							{
								addExpAndSp(player, 591724, 35928);
							}
							qs.exitQuest(false, true);
							player.sendPacket(new SocialAction(player.getObjectId(), 3));
							qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
							htmltext = "30414-20.html";
						}
					}
					break;
				}
				case GREENIS:
				{
					if (hasQuestItems(player, ROSELLAS_LETTER))
					{
						htmltext = "30157-01.html";
					}
					else if (hasQuestItems(player, GREENISS_CHARM))
					{
						if (getQuestItemsCount(player, RED_DOWN) < 5)
						{
							htmltext = "30157-03.html";
						}
						else
						{
							takeItems(player, RED_DOWN, -1);
							if (!hasQuestItems(player, MAGICAL_POWERS_RUBY))
							{
								giveItems(player, MAGICAL_POWERS_RUBY, 1);
							}
							takeItems(player, GREENISS_CHARM, 1);
							htmltext = "30157-04.html";
						}
					}
					break;
				}
				case THALIA:
				{
					if (hasQuestItems(player, APPETIZING_APPLE))
					{
						htmltext = "30371-01.html";
					}
					else if (hasQuestItems(player, SAP_OF_THE_MOTHER_TREE))
					{
						if (getQuestItemsCount(player, GOLD_LEAVES) < 5)
						{
							htmltext = "30371-03.html";
						}
						else
						{
							if (!hasQuestItems(player, PURE_AQUAMARINE))
							{
								giveItems(player, PURE_AQUAMARINE, 1);
							}
							takeItems(player, GOLD_LEAVES, -1);
							takeItems(player, SAP_OF_THE_MOTHER_TREE, 1);
							htmltext = "30371-04.html";
						}
					}
					break;
				}
				case NORTHWIND:
				{
					if (hasQuestItems(player, IMMORTAL_LOVE))
					{
						takeItems(player, IMMORTAL_LOVE, 1);
						if (!hasQuestItems(player, LUCKY_POTPOURRI))
						{
							giveItems(player, LUCKY_POTPOURRI, 1);
						}
						htmltext = "30423-01.html";
					}
					else if (hasQuestItems(player, LUCKY_POTPOURRI))
					{
						if (getQuestItemsCount(player, AMETHYST) < 2)
						{
							htmltext = "30423-02.html";
						}
						else
						{
							takeItems(player, AMETHYST, -1);
							if (!hasQuestItems(player, NOBILITY_AMETHYST))
							{
								giveItems(player, NOBILITY_AMETHYST, 1);
							}
							takeItems(player, LUCKY_POTPOURRI, 1);
							htmltext = "30423-03.html";
						}
					}
					break;
				}
			}
		}
		return htmltext;
	}
}