package com.javarush.task.task17.task1715;

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

/*
Аптека
*/

public class Solution {
    public static DrugsController drugsController = new DrugsController(); //1. Создается объект
    public static boolean isStopped = false;

    public static void main(String[] args) throws InterruptedException {
        Thread apteka = new Thread(new Apteka()); //2. Создаются объекты действия
        Thread man = new Thread(new Person(), "Мужчина");
        Thread woman = new Thread(new Person(), "Женщина");

        apteka.start(); //3. Запускаются потоки
        man.start();
        woman.start();

        Thread.sleep(1000); //4. Задержка в 1сек и изменение переменной isStopped = true;
        isStopped = true;
    }

    public static class Apteka {

    }

    public static class Person {

    }

    public static int getRandomCount() {
        return (int) (Math.random() * 3) + 1; //5.Возвращает случайное значение RandomCount
    }

    public static Drug getRandomDrug() { //6. Возращает значение RandomDrug, но как считается ?
        int index = (int) ((Math.random() * 1000) % (drugsController.allDrugs.size()));
        List<Drug> drugs = new ArrayList<>(drugsController.allDrugs.keySet());
        return drugs.get(index);
    }

    private static void waitAMoment() { //7. Метод waitAMoment делает задержку в 0,1сек
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
        }
    }
}

public class Drug {
    private String name;
    private String description;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

package com.javarush.task.task17.task1715;

import java.util.HashMap;
import java.util.Map;

public class DrugsController {
    public static Map<Drug, Integer> allDrugs = new HashMap<Drug, Integer>();   // <Лекарство, Количество>
    //Массив и в него добавляется лекарство

    static {
        Drug panadol = new Drug();
        panadol.setName("Панадол");
        allDrugs.put(panadol, 5);

        Drug analgin = new Drug();
        analgin.setName("Анальгин");
        allDrugs.put(analgin, 18);

        Drug placebo = new Drug();
        placebo.setName("Плацебо");
        allDrugs.put(placebo, 1);
    }

    public void sell(Drug drug, int count) { //метод продажи, по параметрам: "лекарство" и " кол-во"
        String name = Thread.currentThread().getName(); //получаем текущее имя нити
        if (!allDrugs.containsKey(drug)) { //проверсят есть ли лекарство по названию
            System.out.println("Нет в наличии");
        }
        Integer currentCount = allDrugs.get(drug);//хочет купить больше, чем есть в наличии
        if (currentCount < count) {
            System.out.println(String.format("%s хочет %s %d шт. В наличии - %d", name, drug.getName(), count, currentCount));
        } else { //купил что хотел, вычисляем сколько осталось
            allDrugs.put(drug, (currentCount - count));
            System.out.println(String.format("%s купил(а) %s %d шт. Осталось - %d", name, drug.getName(), count, (currentCount - count)));
        }
    }

    public void buy(Drug drug, int count) { //метод покупки
        System.out.println("Закупка " + drug.getName() + " " + count);
        if (!allDrugs.containsKey(drug)) { //если не совпадает название лекарства со списком лекарств,
            // то добавлется лекарство и кол-во  равное 0
            allDrugs.put(drug, 0);
        }
        Integer currentCount = allDrugs.get(drug); //Что такое Integer currentCount = allDrugs.get(drug)? не могу до конца понять
        allDrugs.put(drug, (currentCount + count));
    }
}