import datetime

def guardar_en_archivo(lista_strings):
    # Formateamos la fecha
    fecha_actual = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    nombre_archivo = f"transcription_{fecha_actual}.txt"
    
    # Escribimos la lista en el archivo
    with open(nombre_archivo, 'w') as archivo:
        for linea in lista_strings:
            archivo.write(linea + '\n')

    return nombre_archivo

def leer_del_archivo(nombre_archivo):
    with open(nombre_archivo, 'r') as archivo:
        # Leemos las líneas y eliminamos el salto de línea al final
        contenido = [linea.strip() for linea in archivo.readlines()]
    return contenido

def guardar_dataframe_en_csv(df):
    # Obtener la fecha y hora actual y formatearla
    fecha_actual = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    
    # Generar el nombre del archivo
    nombre_archivo = f"transcription_{fecha_actual}.csv"
    
    # Guardar el DataFrame en el archivo CSV
    df.to_csv(nombre_archivo, index=False)

    return nombre_archivo

def dataframe_a_lista(df):
    # Convertimos todas las columnas a string
    df_str = df.astype(str)
    
    # Concatenamos las columnas fila por fila
    lista_strings = df_str.apply(lambda row: ' '.join(row), axis=1).tolist()
    
    return lista_strings

# def generar_transcripcion(diccionario):
#     # Obtenemos la lista de segmentos del diccionario
#     segmentos = diccionario['segments']
    
#     # Creamos una lista para almacenar las líneas de la transcripción
#     lineas_transcripcion = []
    
#     # Iteramos sobre los segmentos del diccionario
#     i = 0
#     while i < len(segmentos):
#         # Obtenemos el speaker y el texto del segmento actual
#         speaker_actual = segmentos[i]['speaker']
#         texto_actual = segmentos[i]['text']
        
#         # Buscamos el siguiente segmento con un speaker diferente
#         j = i + 1
#         while j < len(segmentos) and segmentos[j]['speaker'] == speaker_actual:
#             texto_actual += ' ' + segmentos[j]['text']
#             j += 1
        
#         # Agregamos el texto del speaker actual a la transcripción
#         parrafo_con_speaker = f"{speaker_actual}: {texto_actual}"
#         linea = parrafo_con_speaker
#         lineas_transcripcion.append(linea)
        
#         # Actualizamos el índice para el siguiente speaker
#         i = j
    
#     # Guardamos la transcripción en un archivo de texto
#     nombre_archivo = guardar_en_archivo(lineas_transcripcion)
    
#     return lineas_transcripcion, nombre_archivo

def generar_transcripcion(diccionario):
    # Obtenemos la lista de segmentos del diccionario
    segmentos = diccionario['segments']
    
    # Creamos una lista para almacenar las líneas de la transcripción
    lineas_transcripcion = []
    
    # Iteramos sobre los segmentos del diccionario
    i = 0
    while i < len(segmentos):
        # Obtenemos el speaker, el texto y el start time del segmento actual
        speaker_actual = segmentos[i]['speaker']
        texto_actual = segmentos[i]['text']
        start_time = segmentos[i]['start']
        
        # Buscamos el siguiente segmento con un speaker diferente
        j = i + 1
        while j < len(segmentos) and segmentos[j]['speaker'] == speaker_actual:
            texto_actual += ' ' + segmentos[j]['text']
            j += 1
        
        # Agregamos el texto del speaker actual a la transcripción
        parrafo_con_speaker = f"{speaker_actual} ({start_time}): {texto_actual}"
        linea = parrafo_con_speaker
        lineas_transcripcion.append(linea)
        
        # Actualizamos el índice para el siguiente speaker
        i = j
    
    # Guardamos la transcripción en un archivo de texto
    nombre_archivo = guardar_en_archivo(lineas_transcripcion)
    
    return lineas_transcripcion, nombre_archivo


def crear_diccionario(json_data):
    # Obtenemos la lista de segmentos del JSON
    segmentos = json_data['segments']
    
    # Creamos los diccionarios para almacenar los datos
    diccionario = {'start_time': [], 'speaker': [], 'word': [], 'score': []}
    
    # Iteramos sobre los segmentos del JSON
    for segmento in segmentos:
        # Obtenemos los valores del segmento
        start_time = segmento['start']
        speaker = segmento['speaker']
        palabras = segmento['words']
        
        # Iteramos sobre las palabras del segmento
        for palabra in palabras:

            # Obtenemos los valores de la palabra
            word = palabra['word']
            if 'score'not in palabra.keys():
                print(segmento)
                print(palabra)
                # Agregamos el score por defecto
                palabra['score'] = 0.5
            else:
                score = palabra['score']

            
            # Agregamos los valores al diccionario
            diccionario['start_time'].append(start_time)
            diccionario['speaker'].append(speaker)
            diccionario['word'].append(word)
            diccionario['score'].append(score)
    
    return diccionario

def generar_html_palabras(palabras, scores):
    # Creamos una lista para almacenar los códigos HTML de cada palabra
    html_palabras = []
    
    # Iteramos sobre las palabras y sus scores
    for palabra, score in zip(palabras, scores):
        # Mapeamos el score a un color en rojo o verde
        if score < 0.5:
            color = f"rgb({int(255*score*2)}, {int(255*(1-score*2))}, 0)"
        else:
            color = f"rgb({int(255*(1-score)*2)}, {int(255*score*2)}, 0)"
        
        # Creamos el código HTML para la palabra con el color asociado
        html_palabra = f"<span style='background-color: {color}; color: black'>{palabra}</span>"
        
        # Agregamos el código HTML a la lista
        html_palabras.append(html_palabra)
    
    # Unimos los códigos HTML de las palabras en una sola cadena
    html_texto = ' '.join(html_palabras)
    
    # Creamos el código HTML completo con el texto resaltado
    html_completo = f"<p>{html_texto}</p>"
    
    return html_completo