import json
from datetime import datetime
import hashlib
import sys
import os
import base64
import smtplib
import ssl
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

sys.path.append('/var/www/html/config')

from cnxpdo import get_connection
from dotenv import load_dotenv

# Cargar las variables de entorno desde el archivo .env
#load_dotenv('/var/www/html/api/crm/configuraciones/.env')

""" script_dir = os.path.dirname(os.path.abspath(__file__))  # Directorio del script
crm_dir = os.path.dirname(script_dir)  # Sube un nivel hasta crm
env_path = os.path.join(crm_dir, "configuraciones", ".env")  # Ahora sí apunta bien

load_dotenv(env_path)


# Obtener las variables de entorno
hostname = os.getenv('SMTP_HOST')
port = int(os.getenv('SMTP_PORT'))
username = os.getenv('SMTP_USER')
password = os.getenv('SMTP_PASS')
appUrl = os.getenv('APP_URL')
appName = os.getenv('APP_NAME')
senderName = os.getenv('SMTP_NOTIFY') """

# hostname = "smtp.office365.com"
# port = 587
# username = "soporte.valormas@agencycic.com"
# password = "P!955488351233oy"
# appUrl = "https://dev.crm.ayudacatastro.co/crm/"
# appName = "Ayuda Catastro - Valor Más+"
# senderName = "Bienvenido a Ayuda Catastro - Valor Más+"

def cargar_configuracion_smtp():
    # Obtener la ruta del .env
    script_dir = os.path.dirname(os.path.abspath(__file__))  # Directorio del script actual
    crm_dir = os.path.dirname(script_dir)  # Sube un nivel hasta 'crm'
    env_path = os.path.join(crm_dir, "configuraciones", ".env")  # Ruta al .env

    # Cargar variables de entorno
    load_dotenv(env_path)

    # Variables requeridas
    required_vars = ['SMTP_HOST', 'SMTP_PORT', 'SMTP_USER', 'SMTP_PASS', 'APP_URL', 'APP_NAME', 'SMTP_NOTIFY']
    
    # Obtener valores y validar que no falten
    config = {}
    for var in required_vars:
        value = os.getenv(var)
        if value is None or value.strip() == "":
            raise ValueError(f"❌ ERROR: La variable de entorno '{var}' no está definida o está vacía en {env_path}")
        config[var] = value.strip()

    # Convertir el puerto a entero
    try:
        config['SMTP_PORT'] = int(config['SMTP_PORT'])
    except ValueError:
        raise ValueError(f"❌ ERROR: SMTP_PORT ('{config['SMTP_PORT']}') debe ser un número entero válido.")

    print("✅ Configuración SMTP cargada correctamente.")
    return config

# Cargar configuración SMTP
smtp_config = cargar_configuracion_smtp()

# Asignación de valores
hostname = smtp_config['SMTP_HOST']
port = smtp_config['SMTP_PORT']
username = smtp_config['SMTP_USER']
password = smtp_config['SMTP_PASS']
appUrl = smtp_config['APP_URL']
appName = smtp_config['APP_NAME']
senderName = smtp_config['SMTP_NOTIFY']


def sendEmailEmployee(input_data):

    # Obtener datos del input
    nombre_usuario = input_data.get('user', '').strip()
    correos = input_data.get('email', '').strip()
    codigo = input_data.get('codigo')

    # Crear el mensaje de correo
    message = MIMEMultipart("alternative")
    message["From"] = f"{senderName} <{username}>"
    message["To"] = correos
    message["Subject"] = f"Bienvenido a {appName}"

    # Cuerpo del correo en formato HTML
    html_body = f"""
    <!DOCTYPE html>
    <html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Bienvenido a {appName}</title>
        <style>
            body {{
                font-family: Arial, sans-serif;
            }}
            .container {{
                max-width: 600px;
                margin: 0 auto;
                padding: 20px;
                border: 1px solid #e0e0e0;
                border-radius: 5px;
            }}
            .header {{
                text-align: center;
                margin-bottom: 20px;
            }}
            .code {{
                background-color: #f7f7f7;
                padding: 10px;
                border: 1px solid #e0e0e0;
                border-radius: 5px;
                text-align: center;
            }}
            .footer {{
                text-align: center;
                margin-top: 20px;
            }}
        </style>
    </head>
      <body>
        <div class="container">
            <div class="header">
                <h1>Bienvenido a Ayuda Catastro - Valor Más</h1>
                <p>¡Gracias por unirte a nuestra plataforma!</p>
            </div>
            <p>Hola, <strong>{nombre_usuario}</strong></p>
            <p>A continuación, te proporcionamos un código temporal para que puedas acceder a tu cuenta:</p>
            <div class="code">
                <h3>{codigo}</h3>
            </div>
            <p>Utiliza este código como contraseña temporal para acceder a tu cuenta. Si no has solicitado un código temporal, ignora este mensaje o ponte en contacto con nuestro equipo de soporte.</p>
            <p>Recuerda que puedes cambiar tu contraseña en cualquier momento.</p>
            <p>Para acceder a tu cuenta, visita la siguiente ruta: <a href="{appUrl}"> Entrada al Sistema Ayuda Catastro - Valor Más</a></p>
            <div class="footer">
                <p>🖥 Equipo Ayuda Catastro - Valor Más</p>
            </div>
        </div>
    </body>
    </html>
    """

    part = MIMEText(html_body, "html")
    message.attach(part)

    # Conexión SMTP y envío de correo
    try:
        context = ssl.create_default_context()
        with smtplib.SMTP(hostname, port) as server:
            server.ehlo()
            server.starttls(context=context)
            server.login(username, password)
            server.sendmail(username, correos, message.as_string())

        response = {
            "success": True,
            "message": "El correo electrónico ha sido enviado correctamente."
        }
        return response

    except Exception as e:
        return {
            "success": False,
            "message": f"Error en el envío del correo electrónico: {str(e)}"
        }