package com.brysonm.uconomy;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
public class SaleUtils {
private static List<Sale> sales = new ArrayList<Sale>();
public static void constructSale(Player player, Material material, double price) {
Sale sale = new Sale(player.getUniqueId(), material, price);
sales.add(sale);
}
public static void loadSales() {
FileConfiguration config = uConomy.getSalesYML().getConfig();
if(!config.contains("sales")) return;
for(String key : config.getConfigurationSection("sales").getKeys(false)) {
UUID uuid = UUID.fromString(key);
UUID playerUUID = UUID.fromString(config.getString("sales." + key + ".player"));
Material material = Material.getMaterial(config.getString("sales." + key + ".material"));
double price = config.getDouble("sales." + key + ".price");
Sale sale = new Sale(uuid, playerUUID, material, price);
sales.add(sale);
}
}
public static List<Sale> getSales(final Material material, final int amount, boolean isBuying) {
final List<Sale> list = new ArrayList<Sale>();
final List<Double> prices = new ArrayList<Double>();
new BukkitRunnable() {
public void run() {
for(Sale sale : sales) {
if(sale.getMaterial() == material) {
prices.add(sale.getPrice());
}
}
}
}.runTaskAsynchronously(uConomy.getInstance());
Collections.sort(prices);
if(prices.isEmpty()) return list;
if(prices.size() < amount) {
new BukkitRunnable() {
public void run() {
for(int i = 0; i < prices.size(); i++) {
list.add(null);
}
}
}.runTaskAsynchronously(uConomy.getInstance());
return list;
}
new BukkitRunnable() {
public void run() {
for(int i = 0; i < amount; i++) {
list.add(getSale(prices.get(i)));
}
}
}.runTaskAsynchronously(uConomy.getInstance());
if(!isBuying) {
new BukkitRunnable() {
public void run() {
for(Sale sale : list) {
sales.add(sale);
}
}
}.runTaskAsynchronously(uConomy.getInstance());
}
return list;
}
public static Sale getSale(double price) {
Sale sale = null;
for(Sale s : sales) {
if(s.getPrice() == price) {
sale = s;
}
}
sales.remove(sale);
return sale;
}
public static void buyItems(final Player player, final List<Sale> list) {
new BukkitRunnable() {
public void run() {
for(Sale sale : list) {
player.getInventory().addItem(new ItemStack(sale.getMaterial(), 1));
uConomy.getSalesYML().getConfig().set("sales." + sale.getUUID().toString(), null);
uConomy.getSalesYML().saveConfig();
BalanceUtils.withdrawAmount(player.getUniqueId(), sale.getPrice());
BalanceUtils.depositAmount(sale.getPlayerUUID(), sale.getPrice());
if(Bukkit.getPlayer(sale.getPlayerUUID()) != null) {
Bukkit.getPlayer(sale.getPlayerUUID()).sendMessage(ChatColor.GOLD + "A player has bought 1 " + ItemUtils.toFriendlyName(sale.getMaterial()) + " from you for " + sale.getPrice() + " gold. Your new balance is " + BalanceUtils.getBalance(sale.getPlayerUUID()) + ".");
}
}
}
}.runTaskAsynchronously(uConomy.getInstance());
}
public static void migrateUUIDs() {
for(String name : uConomy.getBalancesYML().getConfig().getKeys(false)) {
double balance = uConomy.getBalancesYML().getConfig().getDouble(name);
uConomy.getBalancesYML().getConfig().set(name, null);
uConomy.getBalancesYML().getConfig().set(UUID.fromString(name).toString(), balance);
uConomy.getBalancesYML().saveConfig();
}
for(String saleId : uConomy.getSalesYML().getConfig().getConfigurationSection("sales").getKeys(false)) {
String name = uConomy.getSalesYML().getConfig().getString("sales." + saleId + ".player");
uConomy.getSalesYML().getConfig().set("sales." + saleId + ".player", Bukkit.getPlayer(name).getUniqueId().toString());
uConomy.getSalesYML().saveConfig();
}
}
}