import pandas as pd
import time

start_time = time.time()

#Holiii, esto aun es un prototipo, asi que ya que Israel nos pasa lo que debemos subir
#ya tenemos el codigo de acta y sub acta agregamos en la columna E un columnas y llamarla
#Código de Sub_Acta de Solicitud, luego la borramos ntp, colocar los nombre y la matricula y Focal
#Validar que no hay duplicidad de código de subacta
#Que tambien viene de su la base que nos pasa Israel.
Ruta_consolidado = 'C:/Users/T45134/OneDrive - Credicorp/AtencionDelBuzon/Utencilios/Los4Abiertos/Multivendor V1 1 1-P09LLS07906SNE.xlsm'
Plantilla_ruta = r'D:\Datos de Usuarios\T45134\Downloads\ReportePlantilla20250306113302.xlsx'
Plantilla = pd.read_excel(Plantilla_ruta)
#Ahora lo siguiente es cargar las ASS nueva y el detalle ya no sera necesario alta o Moviper 
#Xq la info q necesitamos ya viene de la parte de Israel
ASS_CONSOLIDADO = pd.read_excel(Ruta_consolidado,sheet_name='Consolidado')
ASS_Detalle = pd.read_excel('C:/Users/T45134/OneDrive - Credicorp/Solicitud_Detalle.xlsx')
ASS_PM = pd.read_excel(Plantilla_ruta, sheet_name='PM')
ASS_CL = pd.read_excel(Plantilla_ruta, sheet_name='Chapter')
ASS_CL = ASS_CL.drop_duplicates(subset='MATRICULA',keep='first')


# Asegurarse de que la columna clave está configurada como índice en ASS_CONSOLIDADO
ASS_CONSOLIDADO.set_index('Sub Codigo de Acta', inplace=True)

# Diccionario de mapeo personalizado entre columnas de ASS_CONSOLIDADO y las de la plantilla
columnas_mapeo = {
    'Gasto/Inversión':'Descripcion Gasto/Inversión',
    'Tribu/Coe/Proyecto Independiente donde trabajará el recurso':'Descripcion Tribu/COE donde trabaja',
    'Squad':'Descripcion Squad' ,
    'Nombre de Proyecto dentro de Tribu (solo si aplica)':'Descripcion Proyecto',
    'Nombre PO': 'Descripcion PO',
    'Matricula PM': 'Descripcion PM',
    'Matricula de Chapter Lead': 'Matricula de Chapter Lead',
    'Horizontal': 'Horizontal',
    'Rol': 'Descripcion Rol',
    'Especialización':'Descripcion Especialidad',
    'Tecnología' : 'Descripcion Tecnologia',
    'Seniority' : 'Descripcion Seniority',
    'Código de aplicación':'Descripcion Aplicación',
    'Bloque tecnologico':'Descripcion Bloque Tecnologico',
    'Temporal / Permanente':'Descripcion Temporal/Permanente',
    'Fecha Inicio Requerida':'Fecha Inicio Recurso',
    'Fecha Fin': 'Fecha Fin Recurso',
    'Perímetro':'Descripcion Proyecto/Perimetro',
    'Presupuesto':'Descripcion Presupuesto',
    'OI': 'OI',
    'OE' : 'OE',
    'Motivo del acta' : 'Motivo del Acta'
}

# Crear la columna vacía 'Estado Acta' antes de llenarla
Plantilla['Estado Acta'] = ''  
 
# Ahora llenamos la columna según si el 'Código de Acta de Solicitud' se encuentra en 'ASS_CONSOLIDADO'
Plantilla['Estado Acta'] = Plantilla['Código de Acta de Solicitud'].apply(
    lambda x: 'Encontrado' if x in ASS_CONSOLIDADO['Código de Acta'].values else 'No Encontrado'
)
 
# Mapear y rellenar columnas
for col_ass, col_excel in columnas_mapeo.items():
    if col_ass in ASS_CONSOLIDADO.columns:
        Plantilla[col_excel] = Plantilla['Código de Sub_Acta de Solicitud'].map(ASS_CONSOLIDADO[col_ass])
    else:
        print(f"La columna '{col_ass}' no existe en ASS_CONSOLIDADO y no se puede mapear a '{col_excel}'.")

#ASS_Detalle.set_index('Concatenado',inplace=True)
#Siempre tranforma en minuscula o mayuscula
Plantilla['Concatenado'] = (Plantilla['Código de Acta de Solicitud'].astype(str) + Plantilla['Descripcion Empresa'].astype(str)).str.lower()
ASS_Detalle['Concat']=(ASS_Detalle['Título'].astype(str)+ASS_Detalle['EMPRESA'].astype(str)).str.lower()

matching = Plantilla['Concatenado'].isin(ASS_Detalle.index)
print(f"Total coincidencias en 'Concatenado': {matching.sum()} de {len(Plantilla)}")

ASS_Detalle.set_index('Concat', inplace=True)
#Aqui solo importa el perfil, la tarifa por siacaso lo coloco
columnas_mapeo_detalle = {
    'UBICACION':'Descripcion Ubicación',
    'LOCAL':'Descripcion Local/Desplazado',
    'PAIS':'Descripcion Pais',
    'TARIFA':'Tarifa'
}

for col_detalle, col_plantilla in columnas_mapeo_detalle.items():
    if col_detalle in ASS_Detalle.columns:
        Plantilla[col_plantilla] = Plantilla['Concatenado'].map(ASS_Detalle[col_detalle])
    else:
        print(f"La columna '{col_detalle}' no existe en ASS_Detalle y no se puede mapear a '{col_plantilla}'.")

#Aqui vamos a tratar de reemplaz el CL y PM, PO no se puede xq no esta en nuestro consolidado:c
#PM
Plantilla['Descripcion PM']=Plantilla['Descripcion PM'].map(ASS_PM.set_index('MATRICULA')['NOMBRE_COMPLETO']).combine_first(Plantilla['Descripcion PM'])
Plantilla['Descripcion PM']=Plantilla['Descripcion PM'].replace(
    to_replace=r'(?i)^no aplica$',
    value = 'NO APLICA  ',
    regex = True
)

#CHAPTER

Plantilla['Descripcion Chapter']=Plantilla['Matricula de Chapter Lead'].map(ASS_CL.set_index('MATRICULA')['NOMBRE_COMPLETO']).combine_first(Plantilla['Matricula de Chapter Lead'])
roles_especiales = [ 'Data Engineer Relational SQL', 'Big Data Engineer', 'Cloud Data Engineer', 
                    'Data Analyst','Data Architect', 'Data Modeler', 'Data Steward', 'Custodio Técnico', 
                    'Data Release', 'Data Support', 'Data Support Platorm', 'Arquitecto Salesforce', 
                    'Ingeniero Salesforce','DevOps Developer', 'DevOps Engineer', 'Ingeniero SRE', 
                    'Developer', 'Quality Engineering Automation', 'Quality Engineer Performance',
                    'Developer Mobile (IOS) - Yape Desarrollo', 'Developer Mobile (ANDROID) - Yape Desarrollo',
                    'Security Engineer - Yape Desarrollo', 'DevOps Engineer - Yape Desarrollo',
                    'Data Ops - Yape Desarrollo', 'Backend Developer - Yape Desarrollo',
                    'Architect - Yape Desarrollo', 'Frontend Developer - Yape Desarrollo',
                    'Data Engineer - Yape Desarrollo', 'Data Architect - Yape Desarrollo',
                    'QA - Yape Desarrollo', 'Engineer Manager - Yape Desarrollo', 'Lean Change Consultant',
                    'Asistente de Gobierno', 'Lean Specialist', 'Data Scientist', 'Data Scientist Cognitive',
                    'Machine Learning Engineer', 'Administrador Salesforce', 'Project Manager'] 

Plantilla['Descripcion Modelo Servicio'] = Plantilla.apply(
    lambda row: 'Staff Augmentation - NuevoOut24' if row['Estado Acta'] == 'Encontrado' and row['Descripcion Rol'] in roles_especiales else 'Staff Augmentation', axis=1 )

#Hora de homologar Tribu:
Homo_Tribu = {
    'TRIBU TESORERÃA': 'TRIBU TESORERÍA',
    'DESARROLLO DE NUEVOS NEGOCIOS (COCOS Y LUCAS)':'Desarrollo de Nuevos Negocios-Cocos y Lucas'
}

Plantilla['Descripcion Tribu/COE donde trabaja'] = Plantilla['Descripcion Tribu/COE donde trabaja'].replace(Homo_Tribu)

#Hora de homologar Proyecto:
Homo_Proyec = {
    'ESTRATEGIA TECNOLOGICA DE SOLUCIONES DE PAGO': 'Estrategia Tecnológica de Soluciones de Pago',
    'Proyecto Nuevo Autorizador Transaccional ATM y POS' : 'Nuevo Autorizador Transaccional ATM y POS',
    'TRANSFORMACION DEL JOURNEY DE CASOS': 'Transformación del Journey de Casos',
    'HERRAMIENTA DE GOBIERNO RIESGOS Y CUMPLIMIENTO (GRC)':'Herramienta de Gobierno, riesgos y cumplimiento (GRC)',
    'MigraciÃ³n del Contact Center a Cloud': 'Migración del Contact Center a Cloud',
    'RENOVACION CUSTODIA': 'Renovación Custodia',
    'SOLUCION INTEGRAL CONTABLE' : 'Solución Integral Contable',
    'PROYECTO DE AUTOMATIZACIONES (FINANZAS)': 'PROYECTO AUT. FINANZAS'
}

Plantilla['Descripcion Proyecto'] = Plantilla['Descripcion Proyecto'].replace(Homo_Proyec)

#Homologar Squad
Homo_Squad = {
    'SOLUCIONES MIGRACIÃ“N CLOUD': 'SOLUCIONES MIGRACIÓN CLOUD',
    'SQ GESTIÃ“N PORTAFOLIO': 'SQ GESTIÓN PORTAFOLIO',
    'LOGIN HOME': 'Journey Login y Home',
    'SQ INTEGRACIÃ“N': 'SQ INTEGRACIÓN',
    'SQUAD ALEXANDRIA NEGOCIOS': 'SQUAD ALEXANDRIA',
    'SQ - LAB 4 (B2B) - CT – NT': 'SQ - LAB 4 (CRECE) - CT - NT',
    'MESA SOPORTE': 'MESA DE SOPORTE',
    'SQ AUTORIZADOR ATM Y POS': 'Squad Autorizador ATM y POS',
    'SQ DEUDA TÃ‰CNICA': 'SQ DEUDA TÉCNICA',
    #'SQ SOLUCIONES ALTERNATIVAS DE MIGRACION': 'SQ SOLUCIONES ALTERNATIVAS DE MIGRACION',
    'SQUAD FOR ANALYTICS': 'For Analytics',
    'SQ DE PLATAFORMA DATALAKE CLOUD': 'PLATAFORMA DATALAKE CLOUD',
    'MIGRACION PRICING': 'Migración Pricing',
    'SQ ECOSISTEMA TI': 'SQ Ecosistemas TI',
    'Gestión de Cambio y adopción': 'Gestion de Cambio y Adopcion',
    'SQ - LAB CROSS - CT â€“ NT': 'SQ - LAB CROSS - CT – NT',
    #'PLATAFORMA E INTEGRACIONES': 'PLATAFORMA E INTEGRACIONES',
    #'SQ VENTA TRADICIONAL': 'SQ VENTA TRADICIONAL',
    'SQ GDH SIGA LOGISTICA Y TALENTO CRDICORP': 'GDH SIGA, LOGISTICA Y TALENTO CREDICORP',
    'MARTECH': 'SQ MARTECH',
    'SQ Tap2Phone': 'Tap2Phone',
    'AUTOATENCION': 'SQ AUTOATENCION',
    'SQ Salesforce PrÃ©stamos': 'SQ Salesforce Préstamos',
    'BILFROST':'BIFROST'
}

Plantilla['Descripcion Squad'] = Plantilla['Descripcion Squad'].replace(Homo_Squad)

# Guardar el archivo con la información actualizada
Plantilla.to_excel('plantilla_completada.xlsx', index=False)

end_time = time.time()

print("Archivo de plantilla actualizado y guardado exitosamente.")

print(f"Tiempo de ejecución: {end_time - start_time} segundos")