Загрузка данных


# store.py
import random
from supplier import Supplier

class Store:
    """Магазин со складом, графиком работы и возможностью заказа у поставщика."""
    def __init__(self, name: str, processing_time: int,
                 open_hour: float, close_hour: float,
                 supplier: Supplier = None) -> None:
        self.name = name
        self.processing_time = processing_time       # дополнительное время обработки, мин
        self.open_hour = open_hour
        self.close_hour = close_hour
        self.supplier = supplier or Supplier("Default")
        # Начальный запас: словарь товар -> количество. Пока один товар (item1) для демонстрации.
        self.stock = {"item1": 5}   # 5 единиц товара

    def is_open(self, current_hour: float) -> bool:
        if self.close_hour >= self.open_hour:
            return self.open_hour <= current_hour < self.close_hour
        else:  # ночной график
            return current_hour >= self.open_hour or current_hour < self.close_hour

    def time_until_close(self, current_hour: float) -> float:
        if not self.is_open(current_hour):
            return 0.0
        if self.close_hour >= self.open_hour:
            return self.close_hour - current_hour
        else:
            return (24.0 - current_hour) + self.close_hour

    def has_item(self, item_name: str = "item1") -> bool:
        """Проверить наличие товара (по умолчанию 'item1')."""
        return self.stock.get(item_name, 0) > 0

    def request_supplier(self, item_name: str = "item1") -> tuple[bool, float]:
        """
        Попытаться восполнить товар через поставщика.
        Возвращает (успех, задержка в часах).
        """
        success, delay = self.supplier.supply()
        if success:
            # Увеличиваем запас (например, на 10 единиц)
            self.stock[item_name] = self.stock.get(item_name, 0) + 10
        return success, delay

    def __str__(self):
        return (f"{self.name} (обработка +{self.processing_time} мин, "
                f"часы работы: {self.open_hour}-{self.close_hour})")