package me.beastman3226.bc.job;
import com.evilmidget38.UUIDFetcher;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import me.beastman3226.bc.BusinessCore.Information;
import me.beastman3226.bc.business.Business;
import me.beastman3226.bc.errors.OpenJobException;
import me.beastman3226.bc.event.business.BusinessBalanceChangeEvent;
import me.beastman3226.bc.event.job.JobClaimedEvent;
import me.beastman3226.bc.event.job.JobCreatedEvent;
import me.beastman3226.bc.player.Employee;
import me.beastman3226.bc.player.EmployeeManager;
import me.beastman3226.bc.util.Prefixes;
import net.milkbowl.vault.economy.EconomyResponse;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
/**
*
* @author beastman3226
*/
public class JobManager {
public static Job getJob(int i) {
for (Job j : Job.jobList) {
if (j.getID() == i) {
return j;
}
}
return null;
}
public static Job createJob(Player p, String description, double pay) {
Job j = null;
JobCreatedEvent event = new JobCreatedEvent(description, p, pay);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
j = new Job(event.getID(), event.getName(), event.getDescription(), event.getLocation(), event.getPayment());
Job.jobList.add(j);
}
return j;
}
public static boolean claimJob(Employee e, Job j) {
JobClaimedEvent event = new JobClaimedEvent(j, e.getID());
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
if (j == null) {
return false;
}
j.claim(e);
try {
e.startJob(j.getID());
} catch (OpenJobException ex) {
event.setCancelled(true);
return false;
}
}
return true;
}
public static boolean completeJob(Employee e, Job j) {
EconomyResponse r = Information.eco.withdrawPlayer(j.getPlayer(), j.getPayment());
if (r.transactionSuccess()) {
BusinessBalanceChangeEvent event = new BusinessBalanceChangeEvent(e.getBusiness(), j.getPayment());
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
e.getBusiness().deposit(event.getAmount());
e.completeJob();
j.finish();
}
} else {
try {
Bukkit.getPlayer(UUIDFetcher.getUUIDOf(j.getPlayer())).sendMessage(Prefixes.ERROR + "Your balance is insufficient. Get more money!");
} catch (Exception ex) {
Logger.getLogger(JobManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
Job.jobList.remove(j);
return r.transactionSuccess();
}
public static void loadJobs() {
for (String string : Information.jobYml.getKeys(false)) {
int x = 0, y = 0, z = 0;
try {
String location = Information.jobYml.getString(string + ".location");
String[] s = location.split(",");
x = Integer.parseInt(s[0]);
y = Integer.parseInt(s[1]);
z = Integer.parseInt(s[2]);
} catch (NumberFormatException nfe) {
}
World world = Bukkit.getWorld(Information.jobYml.getString(string + ".world"));
Location loc = new Location(world, x, y, z);
String issuer = Bukkit.getPlayer(UUID.fromString(Information.jobYml.getString(string + ".UUID"))).getName();
if(issuer == null) {
issuer = Bukkit.getOfflinePlayer(UUID.fromString(Information.jobYml.getString(string + ".UUID"))).getName();
}
Job j = new Job(Integer.parseInt(string), issuer, Information.jobYml.getString(string + ".description"), loc, Information.jobYml.getDouble(string + ".payment"));
Job.jobList.add(j);
if (Information.debug) {
Information.log.log(Level.INFO, "Created job #{0} with description: {1}", new Object[]{j.getID(), j.getDescription()});
}
}
}
public static String[] listJobs(int i) {
List<String> jobs = new ArrayList<String>();
for (Job j : Job.jobList) {
if (!j.isClaimed()) {
jobs.add(ChatColor.AQUA + "#" + j.getID() + ": " + j.getDescription());
}
}
if (((ArrayList<String>) jobs).size() < i || ((ArrayList<String>) jobs).size() < (i * 5) + 5) {
try {
return jobs.subList(i * 5, jobs.size()).toArray(new String[]{});
} catch (ArrayIndexOutOfBoundsException aioobe) {
return jobs.toArray(new String[]{});
}
}
if (i == 0 || i == 1) {
return jobs.toArray(new String[]{});
} else {
return jobs.subList(i * 5, (i * 5) + 5).toArray(new String[]{});
}
}
public static boolean isIssuer(String name) {
for (Job j : Job.jobList) {
if (j != null) {
if (j.getPlayer().equalsIgnoreCase(name)) {
return true;
}
}
}
return false;
}
public static Job getJob(String name) {
for (Job j : Job.jobList) {
if (j.getPlayer().equalsIgnoreCase(name)) {
return j;
}
}
return null;
}
public static Job[] getJobs(String issuer) {
ArrayList<Job> jobs = new ArrayList<Job>();
for (Job j : Job.jobList) {
if (j.getPlayer().equalsIgnoreCase(issuer)) {
jobs.add(j);
}
}
return jobs.toArray(new Job[]{});
}
public static boolean doesBelongToBusiness(Employee employee, Job j) {
Business b = employee.getBusiness();
ArrayList<Employee> employees = new ArrayList<Employee>();
for (Object id : b.getEmployeeIDs()) {
employees.add(EmployeeManager.getEmployee((Integer) id));
}
for (Employee e : employees) {
if (j.getPlayer().equalsIgnoreCase(e.getName())) {
return true;
}
}
return false;
}
public static boolean doesBelongToBusiness(Business business, Job j) {
if (business.getOwnerName().equalsIgnoreCase(j.getPlayer())) {
return true;
}
ArrayList<Employee> employees = new ArrayList<Employee>();
for (Object id : business.getEmployeeIDs()) {
employees.add(EmployeeManager.getEmployee((Integer) id));
}
for (Employee e : employees) {
if (j.getPlayer().equalsIgnoreCase(e.getName())) {
return true;
}
}
return false;
}
}