package ru.job4j.TestTask;

import java.util.*;

/**
 * Обращаемся к mapMoney чтобы взять всю информацию
 */
public class Operation {
    Map<User, List<Account>> mapMoney = new HashMap<>();


    public void addUser(User user) {
        mapMoney.put(user, new ArrayList<Account>());
    }

    public void deleteUser(User user) {
        mapMoney.remove(user);
    }

    public void addAccountToUser(String passport, Account account) {
        List<Account> accounts = mapMoney.get(findByPassport(passport));
        accounts.add(account);
    }


    public void deleteAccountFromUser(String passport, Account account) {
        List<Account> accounts = mapMoney.get(findByPassport(passport));
        accounts.remove(account);
    }

    public User findByPassport(String passport) {
        User user = null;

        for (User temp : mapMoney.keySet()) {
            if (temp.getPassport().equals(passport)) {
                user = temp;
                break;
            }
        }
        return user;
    }

    public User findAllUsers(String name) {
        User user = null;

        for (User temp : mapMoney.keySet()) {
            if (temp.getName().equals(name)) {
                user = temp;
                break;
            }
        }
        return user;
    }

    public Account findAccountByRequisites(String requisites) {
        Account result = null;
        for (List<Account> accountList : mapMoney.values()) {
            for (Account account : accountList) {
                if (account.getRequisites().equals(requisites)) {
                    result = account;
                    break;
                }
            }
        }
        return result;
    }

    /*
    public List<Account> getUserAccounts(Account account) {

        List<Account> list = null;

        for (List<Account> listEntry : mapMoney.values()) {
            if (listEntry.equals(account)) {
                list.add(account);
            }
        }


        return list;
    }*/


    /**
     * метод для перечисления денег с одного счёта на другой счёт если счёт не найден или не хватает денег на счёте
     * srcAccount (с которого переводят) должен вернуть false.
     * надо найти пользователя и реквизиты через методы find.
     */
    public boolean transferMoney(String srcPassport, String srcRequisites, String dstPassport, String dstRequisites, double amount) {
        double count;
        boolean result = false;
        //Map<List<Account>, Double> money = new HashMap<>();

        List<Account> accounts = mapMoney.get(findByPassport(srcRequisites));
        User user = findByPassport(srcPassport);

        List<Account> accounts2 = mapMoney.get(findByPassport(dstRequisites));
        User user2 = findByPassport(dstPassport);

        accounts.get((int) amount);


/*
        for (List<Account> list : mapMoney.values()) {
            for (Account account : list) {
                count = account.getValue();
                if (amount > 0 && account.getRequisites().equals(srcRequisites)) {
                    list.add(account);

                }
                money.put(list, amount);
                double value = amount - count;

                for (List<Account> accountList : money.keySet()) {
                    for (Account account1 : accountList) {
                        double keeper = value + account1.getValue();
                        if (keeper > 0) {
                            return true;
                        } else {
                            return false;
                        }
                    }
                }
            }
        }*/
        return result;
    }
}


@@ -538,25 +538,24 @@
 nt);%0A    %7D%0A%0A
-%0A
     public v
@@ -2798,12 +2798,8 @@
 );%0A%0A
-%0A/*%0A
     
@@ -3097,30 +3097,63 @@
     
-money.put(list, amount
+accounts.get(1000);%0A                accounts2.get(-1000
 );%0A 
@@ -3238,34 +3238,31 @@
 nt%3E 
-accountL
+l
 ist
+2
  : m
+apM
 oney.
-keySet
+values
 ()) 
@@ -3307,27 +3307,21 @@
 ount1 : 
-accountL
+l
 ist
+2
 ) %7B%0A    
@@ -3632,18 +3632,16 @@
        %7D
-*/
 %0A       

Update - Дополнительное задание[#23434]