package com.gmail.val59000mc.scenarios.scenariolisteners;

import com.gmail.val59000mc.UhcCore;
import com.gmail.val59000mc.customitems.UhcItems;
import com.gmail.val59000mc.scenarios.ScenarioListener;
import com.gmail.val59000mc.utils.*;
import com.gmail.val59000mc.configuration.YamlFile;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;

import java.util.ArrayList;
import java.util.List;

public class FlowerPowerListener extends ScenarioListener{

    private static final UniversalMaterial[] FLOWERS = new UniversalMaterial[]{
            UniversalMaterial.POPPY,
            UniversalMaterial.BLUE_ORCHID,
            UniversalMaterial.ALLIUM,
            UniversalMaterial.AZURE_BLUET,
            UniversalMaterial.RED_TULIP,
            UniversalMaterial.ORANGE_TULIP,
            UniversalMaterial.WHITE_TULIP,
            UniversalMaterial.PINK_TULIP,
            UniversalMaterial.OXEYE_DAISY,
            UniversalMaterial.SUNFLOWER,
            UniversalMaterial.LILAC,
            UniversalMaterial.ROSE_BUSH,
            UniversalMaterial.PEONY,
            UniversalMaterial.DEAD_BUSH,
            UniversalMaterial.DANDELION
    };

    private List<JsonItemStack> flowerDrops;
    private int expPerFlower;

    @Override
    public void onEnable(){
        flowerDrops = new ArrayList<>();

        String source = UhcCore.getVersion() < 13 ? "flowerpower-1.8.yml" : "flowerpower-1.13.yml";
        YamlFile cfg;

        try{
            cfg = FileUtils.saveResourceIfNotAvailable("flowerpower.yml", source);
        }catch (InvalidConfigurationException ex){
            ex.printStackTrace();
            return;
        }

        expPerFlower = cfg.getInt("exp-per-flower", 2);

        for (String drop : cfg.getStringList("drops")){
            try {
                JsonItemStack flowerDrop = JsonItemUtils.getItemFromJson(drop);
                flowerDrops.add(flowerDrop);
            }catch (Exception ex){
                Bukkit.getLogger().severe("[UhcCore] Failed to parse FlowerPower item: "+drop+"!");
                Bukkit.getLogger().severe(ex.getMessage());
            }
        }
    }

    @EventHandler (priority = EventPriority.HIGH, ignoreCancelled = true)
    public void onBlockBreak(BlockBreakEvent e){
        Block block = e.getBlock();

        // For tall flowers start with the bottom block.
        Block below = block.getRelative(BlockFace.DOWN);
        if (isFlower(below)){
            block = below;
        }

        if (isFlower(block)){
            Location blockLoc = block.getLocation().add(.5,.5,.5);
            block.setType(Material.AIR);
            UhcItems.spawnExtraXp(blockLoc, expPerFlower);

            int random = RandomUtils.randomInteger(0, flowerDrops.size()-1);
            ItemStack drop = flowerDrops.get(random);
            blockLoc.getWorld().dropItem(blockLoc, drop);
        }
    }

    private boolean isFlower(Block block){
        for (UniversalMaterial flower : FLOWERS){
            if (flower.equals(block)) return true;
        }

        if (UhcCore.getVersion() >= 14){
            String material = block.getType().toString();
            return material.equals("LILY_OF_THE_VALLEY") || material.equals("CORNFLOWER");
        }
        return false;
    }

}