# -*- coding: utf-8 -*-
"""
Copyright (c) 2016 Biuro Urządzania Lasu i Geodezji Leśnej

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), 
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
"""

"""Komunikaty"""
import os
from PyQt5 import uic
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QPushButton, QProgressBar
from qgis.gui import QgsMessageBarItem

from PyQt5.QtWidgets import *
#from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets  import QMessageBox
from qgis.PyQt.QtGui import QIcon
from qgis.core import Qgis
from qgis.utils import iface
from Mapa_PU.model.dialog import TextError
from qgis.gui import QgsMessageBar

import Mapa_PU

def informacja(tytul,text):
    """komunikat informacyjny
    :param tytul:wyświetlany tytuł
    :param text: napis wyświetlany 
    """
    #Marcin Śliwa

    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Information)
    komunikat.setText(text)
    komunikat.setWindowTitle(tytul)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.exec_()
        
def blad(tytul,text):
    """Komunikat błąedu
    :param tytul:wyświetlany tytuł
    :param text: napis wyświetlany 
    """
    #Marcin Śliwa
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Critical)
    komunikat.setText(text)
    komunikat.setWindowTitle(tytul)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.exec_()
    
    
def blad_wybierz_anuluj(tytul,text):
    """Komunikat błąedu
    :param tytul:wyświetlany tytuł
    :param text: napis wyświetlany 
    :return kod wyboru
    """
    #Marcin Śliwa
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Warning)
    komunikat.setText(text)
    komunikat.setWindowTitle(tytul)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.addButton("Wybierz", QMessageBox.AcceptRole)
    komunikat.addButton("Anuluj", QMessageBox.RejectRole)
    return komunikat.exec_()

def ostrzezenie(tytul,text):
    """Komunikat ostrzeżenia
    :param tytul:wyświetlany tytuł
    :param text: napis wyświetlany 
    """
    #Marcin Śliwa
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Warning)
    komunikat.setText(text)
    komunikat.setWindowTitle(tytul)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.exec_()

def wiadomoscBlad(qgsIface,txtmessage,szczegoly,durtime=0):
    
    def showError():
        details=TextError('Opis błędu',szczegoly)
        details.exec_()
    
    widget = qgsIface.messageBar().createMessage("Błąd:", txtmessage)
    button = QPushButton(widget)
    button.setText("Pokaż szczegóły")
    button.pressed.connect(showError)
    widget.layout().addWidget(button)
    if durtime==0:
        qgsIface.messageBar().pushWidget(widget, level=Qgis.Critical)
    else:
        qgsIface.messageBar().pushWidget(widget, Qgis.Critical,duration=durtime)
    
def wiadomoscKrytyczna(qgsIface,txtmessage,durtime):

    """Wiadomość u góry na pasku MessageBar"""
    qgsIface.messageBar().pushMessage("Error", txtmessage , level=Qgis.Critical, duration=durtime)
    
def wiadomoscInfo(qIface,txtmessage,durtime=8):

    """Wiadomość u góry na pasku MessageBar"""
    if txtmessage:
        qIface.messageBar().pushMessage("Informacja", txtmessage , level=Qgis.Info, duration=durtime)        
      
def czekanie(text):
    """Komunikat czekania na wczytanie danych
    :param text: napis wyświetlany 
    """
    #Marcin Śliwa
    iface.messageBar().pushInfo('Proszę czekać', text)
    iface.mainWindow().repaint()

def pasek(text,czas=0,poziom=Qgis.Info):
    """Komunikat na pasku informacji
    :param text: napis wyświetlany
    :param czas: czas wyświetlania
    :param poziom: poziom wyświetlania 
    """
    #Marcin Śliwa
    iface.messageBar().pushMessage("Informacja",text , poziom, czas) 

def pytanie_usun_anuluj(tytul,text):  
    """Komunikat z przyciskami Usuń, Anuluj
    :param tytul:wyświetlany tytuł
    :param text: napis wyświetlany 
    :return kod wyboru
    """
    #Marcin Śliwa  
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Question)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.setText(text)
    komunikat.setWindowTitle(tytul)
    komunikat.addButton("Usuń", QMessageBox.AcceptRole)
    komunikat.addButton("Anuluj", QMessageBox.RejectRole)
    return komunikat.exec_()

def pytanie_zamknij_pokaz_raport(tytul,text):
    """Komunikat z przyciskami Zamknij i Zamknij i pokaż raport
    :param tytul:wyświetlany tytuł
    :param text: napis wyświetlany 
    :return kod wyboru
    """
    #Marcin Śliwa
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Information)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.setText(text)
    komunikat.setWindowTitle(tytul)
    komunikat.addButton("Zamknij", QMessageBox.ActionRole)
    komunikat.addButton("Zamknij i pokaż raport", QMessageBox.ActionRole)
    return komunikat.exec_()

def pytanie_zamknij_pokaz_raport_txt_xls(tytul,text):
    """Komunikat z przyciskami Zamknij i Zamknij i pokaż raport i raport xls
    :param tytul:wyświetlany tytuł
    :param text: napis wyświetlany 
    :return kod wyboru
    """
    #Marcin Śliwa
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Information)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.setText(text)
    komunikat.setWindowTitle(tytul)
    komunikat.addButton("Zamknij", QMessageBox.ActionRole)
    komunikat.addButton("Zamknij i pokaż raport TXT", QMessageBox.ActionRole)
    komunikat.addButton("Zamknij i pokaż raport XLS", QMessageBox.ActionRole)
    return komunikat.exec_()

def usun():
    """Metoda usunięcia messageBar"""
    #Marcin Śliwa
    iface.messageBar().clearWidgets()
    
def pytanie_tak_nie(tytul,text):
    """Pytanie Tak Nie
    :param tytul:wyświetlany tytuł
    :param text: napis wyświetlany 
    :return kod wyboru
    """
    #Marcin Śliwa  
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Question)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.setText(text)
    komunikat.setWindowTitle(tytul)
    komunikat.addButton("Tak", QMessageBox.AcceptRole)
    komunikat.addButton("Nie", QMessageBox.RejectRole)
    return komunikat.exec_()

def blad_systemowy(blad,tekst=None):
    """Obsługa błedu
    :param tekst:tekst główny
    :param blad:obiekt błedu
    """
    #Marcin Śliwa  
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Critical)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.setWindowTitle("Błąd")
        
    if tekst==None:
        #komunikat.setText(blad) 
        komunikat.setText(blad.args[-1])
    else:
        komunikat.setText(tekst)
        #komunikat.setDetailedText(blad)
        komunikat.setDetailedText(blad.args[-1])
    
    horizontalSpacer = QSpacerItem(350, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)
    layout = komunikat.layout()
    layout.addItem(horizontalSpacer, layout.rowCount(), 0, 1, layout.columnCount())
    komunikat.exec_()

def opis_bledu(tytul,szczegoly):
    """Okno szczegółow błędu
    :param tytul; tytul
    :param szczegoly; opis bledu
    """
    komunikat=QMessageBox()
    komunikat.setIcon(QMessageBox.Critical)
    komunikat.setWindowIcon(QIcon('%s\\ikony\\Logo_BULiGL.ico' % Mapa_PU.upul_modul.root))
    komunikat.setWindowTitle(tytul)
    komunikat.setDetailedText(szczegoly)
    horizontalSpacer = QSpacerItem(350, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)
    layout = komunikat.layout()
    layout.addItem(horizontalSpacer, layout.rowCount(), 0, 1, layout.columnCount())
    komunikat.exec_()


    
    

            