from datetime import datetime, timedelta
import ast
import os
from Processing import *
import importlib
import sys
import re


module_name = "Global"

if len(sys.argv) != 2:
		print("Usage: python Entrainement.py <Numerodu global>")
		sys.exit(1)
try:
		parametre = int(sys.argv[1])
		module_name =  "Global_" + str(parametre)
		
except ValueError:
	print("Le paramètre doit être un entier.")
	sys.exit(1)

try:
	imported_module = importlib.import_module(module_name)
except ImportError:
	print(f"Aucun fichier {module_name}")
	sys.exit(1)

nom_dossier = "res_" + str(parametre)

def parse_float_array(string):
	parts = string.split(':')
	nom = parts[0].strip()
	float_array = ast.literal_eval(parts[1].strip())
	return float_array
 
def verif(dateIN):
	
	valeurs_ponderees =[]
	valeurs_date = []

	with open(dateIN, "r") as file: 
		dates = file.readlines()
		for date in dates:
			date = date.strip()
			ponde,da = lirefichier(date)
			valeurs_ponderees.append(ponde)
			valeurs_date.append(da)

	Atest = os.listdir(nom_dossier)[-5:]
	r=[]
	for entest in Atest:
		
		Portfeuille = imported_module.PortefeuilleInit
		pourc = 0
		Action = [0] * 40
		
		with open(nom_dossier+"/"+ entest, "r") as file: 
			file.readline()
			file.readline()
			file.readline()
			file.readline()
			file.readline()
			file.readline()
			file.readline()
			weight1 = parse_float_array(file.readline())
			weight2 = parse_float_array(file.readline())
			weight3 = parse_float_array(file.readline())
			weight4 = parse_float_array(file.readline())
			
			couche1 = parse_float_array(file.readline())
			couche2 = parse_float_array(file.readline())
			couche3 = parse_float_array(file.readline())
			couche4 = parse_float_array(file.readline())


			for date in range(len(dates)):
				res = processing(valeurs_ponderees[date],weight1,weight2,weight3,weight4,couche1,couche2,couche3,couche4,imported_module.nbCouche1,imported_module.nbCouche2,imported_module.nbCouche3,imported_module.nbCouche4)
				for i in range(0,40):
					Action[i],Portfeuille=evaluation(res[i], valeurs_date[date][i], Action[i], Portfeuille,imported_module.resAchat1,imported_module.resAchat2,imported_module.resAchat3,imported_module.resVente,imported_module.Achat1,imported_module.Achat2,imported_module.Achat3,imported_module.Frais)
				pourc = verification(valeurs_date[date],Action,Portfeuille,imported_module.PortefeuilleInit)
			r.append(pourc)
	return r			

def resPourcen():
	return len(os.listdir(nom_dossier))/1000
	
def moyen():
	fichiers = os.listdir(nom_dossier)
	i=0
	for fichier in fichiers:
		i+=float(fichier)
	return i / len(fichiers)
	
def fc_ma():
	fichiers = os.listdir(nom_dossier)
	i = float(fichiers[0])
	for fichier in fichiers:
		if float(fichier) > i :
			i =float(fichier)
	return i
	
	
def operation_sur_resultat(liste1, liste2, liste3, liste4, liste5):
	# Vérifier si toutes les listes ont la même longueur
	if not all(len(liste) == len(liste1) for liste in [liste2, liste3, liste4, liste5]):
		raise ValueError("Toutes les listes doivent avoir la même longueur")

	# Utiliser une compréhension de liste pour additionner les éléments correspondants
	somme_elements = [a + b + c + d + e for a, b, c, d, e in zip(liste1, liste2, liste3, liste4, liste5)]

	# Soustraire 5, diviser par 130 et multiplier par 20
	resultat_final = [(x - 5) / 130 * 20 for x in somme_elements]

	return resultat_final

pourcent=resPourcen()
moyen = moyen()
ma=fc_ma()
V1 = verif("dateV1.txt")
V2 = verif("dateV2.txt")
V3 = verif("dateV3.txt")
V4 = verif("dateV4.txt")
V5 = verif("dateV5.txt")

jour20 = operation_sur_resultat(V1,V2,V3,V4,V5)
print(f"pourcentage : {pourcent}, moyen : {moyen}, max : {ma}")
print(jour20)