#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script para transcribir audio de clase usando OpenAI Whisper
Whisper es un modelo de reconocimiento de voz de código abierto de OpenAI.
Es gratuito y muy preciso para español.
"""

import ssl
import urllib.request

# Deshabilitar verificación SSL temporalmente (para descargar el modelo)
ssl._create_default_https_context = ssl._create_unverified_context

import whisper
import os
from datetime import datetime

# Ruta del archivo de audio
audio_path = "/Users/alexander/Library/CloudStorage/OneDrive-ConsejoSuperiordelaJudicatura/UNIMINUTO/1er CUATRIMESTRE/NRC-200-Machine Learning/ACTIVIDADES/MA Semana 2/Sesion 2. NRC-200-Machine Learning- Únicamente audio.m4a"

# Ruta de salida para la transcripción
output_dir = os.path.dirname(audio_path)
output_path = os.path.join(output_dir, "transcripcion_clase_semana2.txt")
output_md_path = os.path.join(output_dir, "transcripcion_clase_semana2.md")

print("="*70)
print("TRANSCRIPCIÓN DE AUDIO - CLASE MACHINE LEARNING SEMANA 2")
print("="*70)
print(f"\nArchivo de audio: {os.path.basename(audio_path)}")
print(f"Tamaño: {os.path.getsize(audio_path) / (1024*1024):.2f} MB")
print(f"\nIniciando transcripción... (esto puede tomar varios minutos)")
print(f"Hora de inicio: {datetime.now().strftime('%H:%M:%S')}")

# Cargar el modelo de Whisper
# Usamos "base" para velocidad, "medium" para mejor precisión en español
print("\nCargando modelo Whisper (base)...")
model = whisper.load_model("base")

# Transcribir el audio
print("Procesando audio...")
result = model.transcribe(
    audio_path,
    language="es",  # Español
    verbose=True    # Mostrar progreso
)

# Obtener la transcripción completa
transcription = result["text"]

# Guardar en archivo de texto
with open(output_path, 'w', encoding='utf-8') as f:
    f.write("TRANSCRIPCIÓN DE CLASE - MACHINE LEARNING SEMANA 2\n")
    f.write("=" * 60 + "\n")
    f.write(f"Fecha de transcripción: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
    f.write(f"Archivo de audio: {os.path.basename(audio_path)}\n")
    f.write("=" * 60 + "\n\n")
    f.write(transcription)

# Guardar también en formato Markdown con segmentos
with open(output_md_path, 'w', encoding='utf-8') as f:
    f.write("# Transcripción de Clase - Machine Learning Semana 2\n\n")
    f.write(f"**Fecha de transcripción:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
    f.write(f"**Archivo:** {os.path.basename(audio_path)}\n\n")
    f.write("---\n\n")
    f.write("## Contenido\n\n")
    f.write(transcription)
    f.write("\n\n---\n\n")
    
    # Agregar segmentos con timestamps si están disponibles
    if "segments" in result:
        f.write("## Segmentos con Timestamps\n\n")
        for segment in result["segments"]:
            start = segment["start"]
            end = segment["end"]
            text = segment["text"]
            # Convertir segundos a formato MM:SS
            start_min = int(start // 60)
            start_sec = int(start % 60)
            end_min = int(end // 60)
            end_sec = int(end % 60)
            f.write(f"**[{start_min:02d}:{start_sec:02d} - {end_min:02d}:{end_sec:02d}]** {text}\n\n")

print(f"\n✓ Transcripción completada!")
print(f"  Hora de finalización: {datetime.now().strftime('%H:%M:%S')}")
print(f"\n✓ Archivos generados:")
print(f"  - {output_path}")
print(f"  - {output_md_path}")
print(f"\nLongitud de la transcripción: {len(transcription)} caracteres")
