#! /usr/bin/python
# -*- coding: utf-8 -*-

import os, sys, platform
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class verifAppliManquante(QWidget):
	# -------------------------------------
	# Dépendances ...
	# Vérification de la présence des logs
	# indispensables au lancement d'EKD
	# -------------------------------------
	def __init__(self):
        	QWidget.__init__(self)

		mplayer='mplayer'
		mencoder='mencoder'
		composite='composite'
		ffmpeg2theora='ffmpeg2theora'
		imagePy='Image.py'
		numpy='version.py'
		pyqt4='QtGui.so'
	
		scanVerif1=[mplayer, mencoder, composite, ffmpeg2theora, imagePy, numpy, pyqt4]
	
		# Recherche de PyQt4 sur la machine ---------------------------------------
		# Comprehension-list
		listePrePyQt4=[sys.path[parcPresSitePackages] for parcPresSitePackages in range(len(sys.path)) if sys.path[parcPresSitePackages][0:16]=='/Library/Python/'+platform.python_version()[0:3] and "/site-packages" in sys.path[parcPresSitePackages]] 
		# Collecte le contenu du rep. PyQt4
		testAffExistPyQt4=list(os.listdir(listePrePyQt4[0]+'/PyQt4')) 
		# -------------------------------------------------------------------------
	
		# Recherche de Python Imaging Library sur la machine
		testAffExistPIL=[]
		for parcPresPIL in range(len(sys.path)):
			if "PIL" in sys.path[parcPresPIL]:
				testAffExistPIL=list(os.listdir(sys.path[parcPresPIL]))
				# Utile pour détection de la présence du rep. numpy.
				# Détecte si Numpy est installé à partir du moment
				# Python Imaging library est installé
				repUtilNumpy=os.path.dirname(sys.path[parcPresPIL]) 
	
		# Recherche de Numpy sur la machine
		testAffExistNumpy=[]
		if "numpy" in os.listdir(repUtilNumpy):
			 testAffExistNumpy=os.listdir(repUtilNumpy+'/numpy')
	
		# Lieu d'install possibles des logs (essentiellement pour
		# Mplayer, Mencoder, ImageMagick et Ffmepg2theora)
		scanVerifDD_1=list(os.listdir('/opt/local/bin'))
	
		# Vérif et affichage des applis manquantes
		ListeScanAppli=[]
		for appli in scanVerif1:
			if appli not in scanVerifDD_1 and appli not in testAffExistPIL and appli not in testAffExistNumpy and appli not in testAffExistPyQt4:
				ListeScanAppli.append(appli)
				# -------------------------------------------------------------
				# on recupere l'index de chaque element de la liste 
				# ListeScanAppli et on change l'appellation (comme ceci
				# on a pas d'erreur ==> IndexError: list index out of range)
				# -------------------------------------------------------------
				if mplayer in ListeScanAppli:
					idMPlay=ListeScanAppli.index(mplayer)
					ListeScanAppli[idMPlay]="Mplayer"
				elif mencoder in ListeScanAppli:
					idMenc=ListeScanAppli.index(mencoder)
					ListeScanAppli[idMenc]="Mencoder"
				elif composite in ListeScanAppli:
					idImagMagick=ListeScanAppli.index(composite)
					ListeScanAppli[idImagMagick]="ImageMagick"
				elif ffmpeg2theora in ListeScanAppli:
					idFfmpeg2Theora=ListeScanAppli.index(ffmpeg2theora)
					ListeScanAppli[idFfmpeg2Theora]="Ffmpeg2Theora"
				elif imagePy in ListeScanAppli:
					idPIL=ListeScanAppli.index(imagePy)
					ListeScanAppli[idPIL]="Python Imaging Library"
				elif numpy in ListeScanAppli:
					idNumpy=ListeScanAppli.index(numpy)
					ListeScanAppli[idNumpy]="Numpy"
				elif pyqt4 in ListeScanAppli:
					idPyqt4=ListeScanAppli.index(pyqt4)
					ListeScanAppli[idPyqt4]="PyQt4"
				
		MessageApplis=", ".join(ListeScanAppli)
		
		# Test de présence des applis
		if MessageApplis=='': pass
		else: 
			print
			print '--------------------------------------------------------------'
			print _('Manque les applications suivantes (vous devez les installer):')
			print MessageApplis
			print '--------------------------------------------------------------'
			print
			# Fenêtre d'erreur s'affichant si une des dépendances n'est pas satisfaite
			messageErreur=QMessageBox(self)
			messageErreur.setText(_(u"Une erreur est survenue !. Vous devez installer le(s) logiciel(s) suivant(s): <h4>%s</h4>\n... sur votre ordinateur, pour qu'EKD puisse démarrer.") % MessageApplis)
			messageErreur.setWindowTitle(_(u"Erreur"))
			messageErreur.setIcon(QMessageBox.Critical)
			messageErreur.exec_()
			sys.exit()
