# EG11-06 StockItem z oprzyrządowaniem

from BTCInput import *

class StockItem(object):
    '''
    Towar magazynowy dla sklepu z odzieżą
    '''

    show_instrumentation = True
    
    min_price = 0.5
    max_price = 500.0
    
    def __init__(self, stock_ref, price, color, location):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __init__ klasy StockItem')
        self.stock_ref = stock_ref
        self.__price = price
        self.__stock_level = 0
        self.StockItem_version = 1
        self.color = color
        self.location = location

    @property
    def item_name(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę get właściwości item_name klasy StockItem')
        return 'Towar magazynowy'
        
    def check_version(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę check_version klasy StockItem')
        # To jest wersja 1 — nie ma potrzeby aktualizowania czegokolwiek
        pass

    def __str__(self): 
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __str__ klasy StockItem')
        template = '''Numer magazynowy: {0}
Typ: {1}
Lokalizacja: {2}
Cena: {3}
Stan magazynowy: {4}
Kolor: {5}''' 
        return template.format(self.stock_ref, self.item_name, self.location,
                              self.price, self.stock_level, self.color) 

    @property
    def price(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę get właściwości price klasy StockItem')
        return self.__price

    @property
    def stock_level(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę get właściwości stock_level klasy StockItem')
        return self.__stock_level

class Dress(StockItem):

    def __init__(self, stock_ref, price, color, pattern, size, location):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __init__ klasy Dress')
        super().__init__(stock_ref=stock_ref, price=price,
                         color=color, location=location)
        self.pattern = pattern
        self.size = size
        self.Dress_version = 1

    @property
    def item_name(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę get właściwości item_name klasy Dress')
        return 'Sukienka'
        
    def check_version(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę check_version klasy Dress')
        # To jest wersja 1 — nie ma potrzeby aktualizowania czegokolwiek
        super().check_version()
        pass

    def __str__(self):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __str__ klasy Dress')
        stock_details = super().__str__()
        template = '''{0}
Fason: {1}
Rozmiar: {2}'''
        return template.format(stock_details, self.pattern,
                               self.size)

class Pants(StockItem):

    def __init__(self, stock_ref, price, color, pattern, length, waist, location):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __init__ klasy Pants')
        super().__init__(stock_ref=stock_ref, price=price,
                         color=color, location=location)
        self.pattern = pattern
        self.length = length
        self.waist = waist
        self.pants_version = 1

    @property
    def item_name(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę get właściwości item_name klasy Pants')
        return 'Spodnie'

    def check_version(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę check_version klasy Pants')
        # To jest wersja 1 — nie ma potrzeby aktualizowania czegokolwiek
        super().check_version()
        pass

    def __str__(self):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __str__ klasy Pants')
        stock_details = super().__str__()
        template = '''{0}
Fason: {1}
Długość {2}
Pas: {3}'''
        return template.format(stock_details, self.pattern,
                               self.length, self.waist)

class Jeans(Pants):

    def __init__(self, stock_ref, price, color, pattern, length, waist, style, location):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __init__ Jeans')
        super().__init__(stock_ref=stock_ref, price=price,
                         color=color, pattern=pattern, length=length,
                         waist=waist, location=location)
        self.style = style
        self.Jeans_version = 1

    @property
    def item_name(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę get właściwości item_name klasy Jeans')
        return 'Dżinsy'

    def check_version(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę check_version klasy Jeans')
        # To jest wersja 1 — nie ma potrzeby aktualizowania czegokolwiek
        super().check_version()
        pass

    def __str__(self):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __str__ klasy Jeans')
        pants_details = super().__str__()
        template = '''{0}
Styl: {1}'''
        return template.format(pants_details, self.style)
    
    
class Hat(StockItem):

    def __init__(self, stock_ref, price, color, size, location):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __init__ klasy Hat')
        super().__init__(stock_ref=stock_ref, price=price,
                         color=color, location=location)
        self.size = size
        self.Hat_version = 1

    @property
    def item_name(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę get właściwości item_name klasy Hat')
        return 'Czapka'

    def check_version(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę check_version klasy Hat')
        # To jest wersja 1 — nie ma potrzeby aktualizowania czegokolwiek
        super().check_version()
        pass


    def __str__(self):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __str__ klasy Hat')
        stock_details = super().__str__()
        template = '''{0}
Rozmiar: {1}'''
        return template.format(stock_details, self.size)

class Blouse(StockItem):
    
    def __init__(self, stock_ref, price, color, size, style, pattern, location):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __init__ klasy Blouse')
        super().__init__(stock_ref=stock_ref, price=price,
                         color=color, location=location)
        self.size = size
        self.style = style
        self.pattern = pattern
        self.Hat_version = 1

    @property
    def item_name(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę get właściwości item_name klasy Blouse')
        return 'Bluza'

    def check_version(self):
        if StockItem.show_instrumentation:
            print('** Wywołano metodę check_version klasy Blouse')
        # To jest wersja 1 — nie ma potrzeby aktualizowania czegokolwiek
        super().check_version()
        pass

    def __str__(self):
        if StockItem.show_instrumentation:
            print('**Wywołano metodę __str__ klasy Blouse')
        stock_details = super().__str__()
        template = '''{0}
Rozmiar: {1}
Styl: {2}
Fason: {3}'''
        return template.format(stock_details, self.size,
                               self.style, self.pattern)

print('Klasy z oprzyrządowaniem gotowe do użycia')
