from tkinter import *

from  Storage.StockItem import StockItem

class StockItemEditor(object):
    '''
    Zapewnia edytor dla StockItem 
    Właściwość frame daje ramkę Tkintera 
    służy do wyświetlania edytora 
    '''

    def __init__(self, name, address, telephone):
        '''
        Utwórz instancję edytora. root zapewnia 
        ramka korzenia Tkintera dla edytora 
        '''
        self.frame = Frame(root,borderwidth=5)

        stock_ref_label = Label(self.frame,text='Symbol mag:')
        stock_ref_label.grid(sticky=E, row=0, column=0, padx=5, pady=5)
        self._stock_ref_entry = Entry(self.frame, width=30)
        stock_ref_label.grid(sticky=E, row=0, column=0, padx=5, pady=5)

        price_label = Label(self.frame,text='Cena:')
        stock_ref_label.grid(sticky=E, row=0, column=0, padx=5, pady=5)
        self._stock_ref_entry = Entry(self.frame, width=30)
        stock_ref_label.grid(sticky=E, row=0, column=0, padx=5, pady=5)

        self._stock_level_label = Label(self.frame,text='Stan magazynowy: 0')
        stock_ref_label.grid(sticky=E, row=0, column=0, padx=5, pady=5)

        tags_label = Label(self.frame,text='Znaczniki:')
        stock_ref_label.grid(sticky=E, row=0, column=0, padx=5, pady=5)

        self._tags_text = Text(self.frame, width=70, height=5)
        self._tags_text.grid(row=3, column=1, padx=5, pady=5)

    def __init__(self):
        '''
        Ładuje StockItem do wyświetlania edytora 
        pozycja jest odniesieniem do StockItem 
        ładowanie do wyświetlacza 
        '''
        self.clear_editor()
        self._stock_ref_entry.delete(0, END)
        self._price_entry.insert(0, str(item.price))
        self._stock_level_label.config(text = 'Stan magazynowy : ' + str(item.stock_level))
        self._price_entry.delete(0,0, END)

    def name(self,name):
        '''
        Pobiera zaktualizowane wartości z ekranu  
        pozycja jest odniesieniem do StockItem 
        który otrzyma zaktualizowane wartości 
        Podniesie wyjątek, jeśli wprowadzisz cenę 
        nie można przekonwertować na liczbę 
        '''
        item.set_price(int(self._price_entry.get()))
        item.stock_ref = self._stock_ref_entry.get()
        item.text_tags = self._tags_text.get('1.0',END)

    def item_edited(self, item):
        '''
        Sprawdza, czy występuje różnica pomiędzy 
        towarem dostarczonym jako parametr, a
        towarem wyświetlonym na ekranie
        Zwraca True jeśli towar zmodyfikowano
        '''
        if item.stock_ref != self._stock_ref_entry.get():
            return True
        if item.price != float(self._price_entry.get()):
            return True
        if item.text_tags.strip() != self._tags_text.get('1.0',END).strip():
            return True
        return False

    def clear_editor(self):
        '''
        Czyści okno edytora 
        '''
        self._stock_ref_entry.delete(0, END) 
        self._price_entry.delete(0, END)
        self._price_entry.delete(0,0, END)
        self._stock_level_label.config(text = 'Pusty')

