import copy
from calendar import monthrange, day_name
from config import conf
from excel_parser import ExcelParser
from datetime import date
import constants
import re

regex_issue = re.compile(r"[A-Z]+2{0,1}[A-Z]{0,999}-\d+")


class CreazionePacchettiParser(ExcelParser):
	progetti_autorizzati = [
		'AFCIFT', 'AFCUNITTEST', 'AMSOEBTOB', 'BENELUX', 'BMSSTD', 'DIPPY', 'DTDD', 'FGBLP',
		'FGDTIT', 'FGIFT', 'FGMAIT', 'FGMMIT', 'FGMNIT', 'FGMRIT', 'FGMXIT', 'FGPOSFRH',
		'GESTMAXIMA', 'HIGGOVALE', 'IFT', 'MCJ', 'MMCHINA', 'MMESPANA', 'MMGMBH', 'MMLTD', 'MMSAS',
		'MMUSA', 'PIATTCHINA', 'POSSEDEDT', 'RESTOCKING', 'SPEDIZIONIERI', 'WFFATTURE', 'B2E',
		'POS', 'FGMMJ'
	]

	team_list = ['BMS', 'B2X', 'Listini']
	rendicontazioni = ['Consuntivo', 'Progetto']

	def __init__(self, **kwargs):
		kwargs['spreadsheetId'] = '1CS8y7ZBE_KghtSWHb5R2tZpMzzBInijnGgduTpqOIqM'
		kwargs['range_celle_utilizzate'] = 'A1:H1500'
		kwargs['nome_foglio'] = 'Foglio1'
		super(CreazionePacchettiParser, self).__init__(**kwargs)
		self.range_celle_utilizzate = kwargs['range_celle_utilizzate']
		iniziamo = False
		self.list_pacchetti = []

		dict_base = {
			'codice_iniziativa': '',
			'descrizione_iniziativa': '',
			'progetto': '',
			'team_di_sviluppo': '',
			'rendicontazione': '',
		}

		mapping_colonne = {
			0: 'cliente',
			1: 'solo_pm',
			2: 'codice_iniziativa',
			3: 'descrizione_iniziativa',
			4: 'progetto',
			5: 'team_di_sviluppo',
			6: 'rendicontazione',
			7: 'stato',
		}

		for (indice_riga, riga) in enumerate(self.righe):
			tmp_dict = copy.deepcopy(dict_base)

			for (indice_colonna, cella) in enumerate(riga):
				if cella == 'Codice iniziativa':
					iniziamo = True
					break
				elif iniziamo:
					cella = cella.rstrip()
					tmp_dict[mapping_colonne[indice_colonna]] = {
						'TRUE': True,
						'FALSE': False,
					}.get(cella, cella)

			if all((
				any((
					not kwargs.get('check_pacchetto') and tmp_dict.get('stato', '') == 'TODO',
					kwargs.get('check_pacchetto') and kwargs['check_pacchetto'] == tmp_dict.get('codice_iniziativa', ''),
				)),
				tmp_dict.get('cliente', '') == 'MMFG',
				tmp_dict.get('solo_pm') in (True, False),
				tmp_dict.get('codice_iniziativa', '').startswith('FG'),
				len(tmp_dict.get('codice_iniziativa', '')) >= 5,
				len(tmp_dict.get('descrizione_iniziativa', '')) >= 6,
				tmp_dict.get('team_di_sviluppo', '') in self.team_list,
				tmp_dict.get('progetto', '') in self.progetti_autorizzati,
				tmp_dict.get('rendicontazione', '') in self.rendicontazioni,
			)):
				self.list_pacchetti += [tmp_dict]

	def imposta_stato(self, codice_iniziativa, stato):
		for (indice_riga, riga) in enumerate(self.righe):
			if next((True for cella in riga if cella == codice_iniziativa), False):
				self.righe[indice_riga][7] = stato
				break

	def aggiorna(self):
		self.service.spreadsheets().values().batchUpdate(
			spreadsheetId=self.spreadsheetId,
			body={
				'valueInputOption': 'USER_ENTERED',
				'data': [
					{
						'range': self.range_celle_utilizzate,
						'values': self.righe
					},
				]
			}
		).execute()