package org.poopki.duckdns.user_db.Array;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.poopki.duckdns.user_db.UserInfoArray;

import java.util.UUID;

public class AccountEventHandler implements CommandExecutor {
    AccountArray m_AccountArray;
    UserInfoArray m_UserInfoArray;
    public AccountEventHandler(UserInfoArray UIA, AccountArray AA){
        m_AccountArray = AA;
        m_UserInfoArray = UIA;
    }
    public static boolean isStringDouble(String s) {
        try {
            Double.parseDouble(s);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        Player p = (Player) sender;

        if (args.length != 0) {
            switch (args[0]) {
                case "설정":{
                    if (!p.isOp()) {
                        p.sendMessage("관리자만 실행 가능한 명령어입니다.");
                        return false;
                    }
                    if (args.length < 1) {
                        p.sendMessage("설정 대상이 지정되지 않았습니다.");
                        return false;
                    }
                    UUID op = m_UserInfoArray.getUserUUID(args[1]);
                    if (op == null) {
                        p.sendMessage("잘못된 계좌입니다.");
                        return false;
                    }
                    if (args.length < 2) {
                        p.sendMessage("설정 금액을 입력해주세요.");
                        return false;
                    }
                    if (!isStringDouble(args[2])) {
                        p.sendMessage("설정 금액은 숫자만 가능합니다.");
                        return false;
                    }
                    if(m_AccountArray.getAccountInfo(op)+Long.parseLong(args[2])>2147483647){
                        p.sendMessage("최대 금액 이상으로 설정할 수 없습니다.");
                        return false;
                    }
                    m_AccountArray.setAccountInfo(m_UserInfoArray.getUserUUID(args[1]), Long.parseLong(args[2]));
                    p.sendMessage(args[1] + "님의 잔액을 " + Integer.parseInt(args[2]) + "원으로 설정하였습니다.");
                    break;
                }

                case "입금": {
                    if (args.length < 1) {
                        p.sendMessage("이체 대상이 지정되지 않았습니다.");
                        return false;
                    }
                    UUID op = m_UserInfoArray.getUserUUID(args[1]);
                    if (op == null) {
                        p.sendMessage("잘못된 계좌입니다.");
                        return false;
                    }
                    if (args.length < 2) {
                        p.sendMessage("이체 금액을 입력해주세요.");
                        return false;
                    }
                    if (!isStringDouble(args[2])) {
                        p.sendMessage("이체 금액은 숫자만 가능합니다.");
                        return false;
                    }
                    if(p.getUniqueId() == op) {
                        p.sendMessage("자기 자신에게는 이체할 수 없습니다.");
                        return false;
                    }
                    switch(m_AccountArray.transfer(p.getUniqueId(), op, Long.parseLong(args[2])))
                    {
                        case 1: {
                            p.sendMessage(args[1] + "농장에 " + Integer.parseInt(args[2]) + "원을 이체하였습니다.");
                            break;
                        }
                        case 2: {
                            p.sendMessage("잔액은 최대 금액을 초과할 수 없습니다.");
                            break;
                        }
                        case 3:{
                            p.sendMessage("잔액이 부족합니다.");
                            break;
                        }
                    }
                    break;
                }

                case "잔액": {
                    p.sendMessage("==잔액: " + m_AccountArray.getAccountInfo(p.getUniqueId()) + "원==");
                    break;
                }
                default: {
                    p.sendMessage("잘못된 명령어");
                }

            }
        }
        else{
            p.sendMessage("명령어를 입력하세요(잔액 | 이체)");
        }
        return true;
    }
}