#from __future__ import unicode_literals
# -*- coding: utf-8 -*-
from __future__ import division
from time import time, sleep, strftime, localtime

from PyQt4.QtCore import *
from PyQt4.QtGui import *

from ui.ecran_creationPlateau import Ui_creationPlateau

from outilsSvg import *

class EcranCreationPlateau(QDialog):
    """interface de creation/chargement de plateau"""
    def __init__(self, fenetrePrincipale, terrain=None, parent=None):
        """initialisation de la fenetre"""
        super (EcranCreationPlateau, self).__init__()
        self.fenetre = fenetrePrincipale
        self.couleur = QColor(0, 255, 0, 80)
        self.idSvgPlusRecent = None     #id de la sauvegarde du plateau le plus recent
        
        self.createWidgets()
        
        self.majAffichage()
        self.focusBoutonChargerEC()
        
    def createWidgets(self):
        """construction de l'interface"""
        #construction de l'interface
        self.ui = Ui_creationPlateau()
        self.ui.setupUi(self)
        
        self.connect(self.ui.listeMenus, SIGNAL("cellClicked(int,int)"), self.menuChange, Qt.UniqueConnection)
        self.ui.listeMenus.setCurrentCell(0,0)
        self.ui.menus.setCurrentIndex(0)
        self.ui.couleurCasesPlateau.setStyleSheet("QLabel {backGround:%s}" %(self.couleur))
        self.majListeChargement()
        self.connect(self.ui.creerPlateau, SIGNAL("clicked()"), self.creerPlateau)
        self.connect(self.ui.nomPlateau, SIGNAL("textEdited(QString)"), self.focusBoutonCreer)
        self.connect(self.ui.nomPlateau, SIGNAL("textEdited(QString)"), self.majAffichage)
        self.connect(self.ui.listPlateau, SIGNAL("cellPressed(int, int)"), self.majAffichage) 
        self.connect(self.ui.listPlateau, SIGNAL("cellPressed(int, int)"), self.focusBoutonCharger) 
        self.connect(self.ui.selectionCouleur, SIGNAL("clicked()"), self.selectionCouleur)
        self.connect(self.ui.supprimerPlateau, SIGNAL("clicked()"), self.supprimerPlateau)
        self.connect(self.ui.chargerPlateau, SIGNAL("clicked()"), self.chargerPlateau)
        self.connect(self.ui.chargerPlateauEC, SIGNAL("clicked()"), self.chargerPlateauEC)
        self.connect(self.ui.chapitreChargementPlateau, SIGNAL("valueChanged(int)"), self.majListeChargement)
        self.connect(self.ui.toutAfficherPlateau, SIGNAL("stateChanged(int)"), self.majListeChargement)

    def menuChange(self, ligne, col):
        """le menu a ete change dans la QTableWidget"""
        self.ui.menus.setCurrentIndex(ligne)

    def creerPlateau(self):
        nom = self.ui.nomPlateau.text().toUtf8()
        largeur = self.ui.largeurPlateau.value()
        hauteur = self.ui.hauteurPlateau.value()
        chapitre = str(self.ui.chapitrePlateau.value())
        if self.ui.formeCase_hexagone.isChecked():
            formeCases = "H"
        else:
            formeCases = "C"
        ok = True
        if (largeur * hauteur) > 10000:
            reponse = QMessageBox.question(self, 'Message',
                                           "Attention ! \nLe nombre élevé de cases peut entrainer des ralentissements " \
                                           "importants...\nVoulez vous continuer?", QMessageBox.Yes | 
                                           QMessageBox.No, QMessageBox.No)
            if reponse == QMessageBox.No:
                ok = False
        if ok == True:
            self.fenetre.creerPlateau(nom, chapitre, formeCases, largeur, hauteur, self.couleur)
            self.close()

    def chargerPlateau(self):
        """charge le plateau selectionne"""
        index = str(self.ui.listPlateau.item(self.ui.listPlateau.currentRow(), 0).text().toUtf8())
        self.fenetre.chargerPlateau(index)
        self.close()

    def chargerPlateauEC(self):
        """charge le plateau le pus recent"""
        if self.idSvgPlusRecent != None:
            self.fenetre.chargerPlateau(self.idSvgPlusRecent)
            self.close()
            
    def supprimerPlateau(self):
        """supprime le plateau selectionne"""
        reponse = QMessageBox.question(self, 'Message',
                                           "Etes vous sûr de vouloir supprimer ce plateau?", QMessageBox.Yes | 
                                           QMessageBox.No, QMessageBox.No)
        if reponse == QMessageBox.Yes:       
            index = str(self.ui.listPlateau.item(self.ui.listPlateau.currentRow(), 0).text().toUtf8())
            os.remove("parties\\{}\\svg\\{}.p".format(self.fenetre.partie, index))
            supprSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.fenetre.partie), index)
            self.majListeChargement()
        

    def majListeChargement(self):
        """remplit ou maj la liste des plateaux sauvegardes"""
        #on met a jour la largeur des colonnes
        self.ui.listPlateau.setColumnWidth(0, 0)  #colonne de l'index (invisible)
        self.ui.listPlateau.setColumnWidth(1, 55)
        self.ui.listPlateau.setColumnWidth(2, 110)
        self.ui.listPlateau.setColumnWidth(3, 60)
        self.ui.listPlateau.setColumnWidth(4, 80)
        self.ui.listPlateau.setColumnWidth(5, 50)
        self.ui.listPlateau.setColumnWidth(6, 50)
##        self.ui.listPlateau.setColumnHidden(6, True)

        #on vide la liste   si necessaire
        while self.ui.listPlateau.rowCount() > 0:
            self.ui.listPlateau.removeRow(0)
        
        infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.fenetre.partie))
        ligne  = 0
        for id_svg in infosSvg:
            if self.idSvgPlusRecent == None or infosSvg[id_svg]["dateSvg"] > infosSvg[self.idSvgPlusRecent]["dateSvg"]: self.idSvgPlusRecent = id_svg
            
            if infosSvg[id_svg]["chapitre"] == str(self.ui.chapitreChargementPlateau.value()) or bool(self.ui.toutAfficherPlateau.checkState()) == True:
                self.ui.listPlateau.insertRow(ligne)
                self.ui.listPlateau.setItem(ligne, 0, QTableWidgetItem(QString.fromUtf8(str(id_svg))))
                self.ui.listPlateau.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(" "+infosSvg[id_svg]["chapitre"])))
                self.ui.listPlateau.setItem(ligne, 2, QTableWidgetItem(QString.fromUtf8(infosSvg[id_svg]["nom"])))
                self.ui.listPlateau.setItem(ligne, 3, QTableWidgetItem(QString.fromUtf8(strftime('%d/%m/%y %H:%M',localtime(infosSvg[id_svg]["dateCreation"])))))
                self.ui.listPlateau.setItem(ligne, 4, QTableWidgetItem(QString.fromUtf8(strftime('%d/%m/%y %H:%M',localtime(infosSvg[id_svg]["dateSvg"])))))
                if infosSvg[id_svg]["public"] == True:
                    txt = "Oui"
                else:
                    txt = "Non"
                self.ui.listPlateau.setItem(ligne, 5, QTableWidgetItem(QString.fromUtf8(txt)))

                self.ui.listPlateau.setItem(ligne, 6, QTableWidgetItem(QString.fromUtf8(str(infosSvg[id_svg]["dateSvg"]))))
                
                ligne += 1
        for i in range(1,5):
            self.ui.listPlateau.sizeHintForColumn(i)
            
        #on trie par date    
##        trierTable(self.ui.listPlateau, 6, 1)          

    def majAffichage(self):
        self.ui.creerPlateau.setEnabled(len(self.ui.nomPlateau.text().toUtf8()) > 0)
        self.ui.chargerPlateau.setEnabled(self.ui.listPlateau.currentRow()>=0)
        self.ui.supprimerPlateau.setEnabled(self.ui.listPlateau.currentRow()>=0)
        self.ui.chargerPlateauEC.setEnabled(self.ui.listPlateau.rowCount() > 0)
        
    def selectionCouleur(self):
        """selectionne la couleur dans la boite de dialogue dediee"""
        couleur = QColorDialog(self).getColor(QColor("white"), self)
        if couleur.isValid():
            nomCouleur = couleur.name()
            self.ui.couleurCasesPlateau.setStyleSheet("QLabel {backGround:%s}" %(nomCouleur))
            self.couleur = couleur    

    def focusBoutonChargerEC(self):
        self.ui.chargerPlateauEC.setFocus()

    def focusBoutonCharger(self):
        self.ui.chargerPlateau.setFocus()

    def focusBoutonCreer(self):
        self.ui.creerPlateau.setFocus()
