import os
import sys
import base64
from datetime import datetime
from weasyprint import HTML
from io import BytesIO
import requests

sys.path.append('/var/www/cobra/DESARROLLO/valormas/config')

from cnxpdo import get_connection

def consultar_pqrsf(id_pqrsf):
    conexionBD = get_connection()
    if conexionBD is None:
        return {"success": 0, "message": "Error de conexión"}

    try:
        query = """
            SELECT p.*, ps.status as nomstatus, CONCAT(c.nombres, ' ', c.apellidos) AS nombre_ciudadano, 
                c.num_doc_ident AS documento_ciudadano, pc.categoria, pt.tipo_pqrsf, 
                CONCAT(e.nombres, ' ', e.apellidos) AS encargado 
            FROM pqrsf p
            LEFT JOIN pqrsf_status ps ON p.status = ps.id 
            LEFT JOIN ciudadanos c ON p.id_ciudadano = c.id 
            LEFT JOIN pqrsf_categoria pc ON p.id_categoria_pqrs = pc.id 
            LEFT JOIN pqrsf_tipos pt ON p.id_tipo_pqrs = pt.id 
            LEFT JOIN empleados e ON p.id_encargado = e.id 
            WHERE p.id = %s
        """

        cursor = conexionBD.cursor(dictionary=True)
        cursor.execute(query, (id_pqrsf,))
        result = cursor.fetchone()
        cursor.close()

        if result:
            # Si el resultado se encuentra, se regresa como parte del retorno
            pdf_data = generate_pdf(id_pqrsf, result )  # Llamar a la función para generar el PDF
            return {
                "success": 1,
                "message": "PQRSF encontrada",
                "data": result,
                "pdf_data": pdf_data
            }
        else:
            return {"success": 0, "message": f"No se encontró la PQRSF con el id {id_pqrsf}"}

    except Exception as e:
        return {"success": 0, "message": f"Error al obtener los datos de la base de datos: {str(e)}"}


def generate_pdf(id_pqrsf, result):
    """
    Genera un PDF con los detalles de una PQRSF utilizando WeasyPrint.
    """
    print("Generando PDF...")  # Debugging line

    # Conectar a la base de datos para obtener los logs
    conexionBD = get_connection()
    logs_html = ""

    if conexionBD is not None:
        try:
            query_logs = """
                SELECT pl.*, CONCAT(e.nombres, ' ', e.apellidos) AS usuario 
                FROM pqrsf_logs pl 
                INNER JOIN empleados e ON pl.id_usuario = e.id 
                WHERE pl.id_pqrsf = %s
            """
            cursor = conexionBD.cursor(dictionary=True)
            cursor.execute(query_logs, (id_pqrsf,))
            logs_result = cursor.fetchall()
            cursor.close()

            if not logs_result:
                logs_html = '<tr><td colspan="4" style="text-align:center;font-size:15px;">No hay logs de PQRSF</td></tr>'
            else:
                for row in logs_result:
                    logs_html += f"""
                    <tr>
                        <td>{row['evento']}</td>
                        <td>{row['descripcion']}</td>
                        <td>{row['usuario']}</td>
                        <td>{row['fecha_hora']}</td>
                    </tr>
                    """
        except Exception as e:
            logs_html = '<tr><td colspan="4" style="text-align:center;font-size:15px; color:red;">Error al obtener los logs</td></tr>'
            print(f"Error al obtener los logs: {str(e)}")

    # Definir la URL base para la imagen
    app_url = "https://dev.crm.ayudacatastro.co/crm"
    image_url = f"{app_url}/assets/img/logo/Logo_gobernación_men.png"

    try:
        response = requests.get(image_url)
        response.raise_for_status()
        image_data = base64.b64encode(response.content).decode('utf-8')
        src_base64 = f"data:image/png;base64,{image_data}"
    except requests.exceptions.RequestException as e:
        print(f"Error al descargar la imagen: {e}")
        src_base64 = ""

    # Definir los detalles obtenidos de la base de datos
    pqrsf_data = result
    num_radicado = pqrsf_data['num_radicado']
    fecha_radicado = pqrsf_data['fecha_radicado']
    nombre_ciudadano = pqrsf_data['nombre_ciudadano']
    documento_ciudadano = pqrsf_data['documento_ciudadano']
    categoria = pqrsf_data['categoria']
    tipo_pqrsf = pqrsf_data['tipo_pqrsf']
    encargado = pqrsf_data['encargado']
    nomstatus = pqrsf_data['nomstatus']
    radicado = pqrsf_data['contenido_solicid']
    respuesta_encargado = pqrsf_data['respuesta_encargado']
    fecha_respuesta = pqrsf_data['fecha_respuesta']
    fechaYHora = datetime.now().strftime("%d/%m/%Y %H:%M:%S")

    # Crear el contenido HTML para el PDF
    html_content = f"""
    <html>
<head>
    <style>
        body {{
            font-family: Arial, sans-serif;
        }}
        .container {{
            text-align: center;
            margin-bottom: 20px;
        }}
        h1 {{
            color: #124734;
        }}
        .logo {{
            width: 170px;
            height: auto;
        }}
        .data-section {{
            display: inline-block;
            width: calc(33.3% - 10px);
            vertical-align: top;
            margin-bottom: 15px;
            background-color: #a9f5da;
            padding: 10px;
            border-radius: 10px;
            box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
            margin-left: 5px;
            margin-right: 5px;
        }}
        .data-title {{
            font-weight: bold;
            color: #124734;
            margin-bottom: 8px;
            font-size: 12px;
        }}
        .data-value {{
            color: #000000;
            font-size: 11px;
            line-height: 18px;
            margin-bottom: 8px;
        }}
        .details-table {{
            width: 100%;
            border-collapse: collapse;
            margin-bottom: 20px;
        }}
        .details-table td {{
            padding: 6px; /* Reducido */
            font-size: 12px;
            line-height: 16px; /* Reducido */
        }}
        .details-table .header {{
            font-weight: bold;
            text-align: left;
            background-color: #b4d6ca;
            color: #124734;
        }}
        .data-table {{
            width: 100%;
            margin-top: 20px;
            border-collapse: collapse;
        }}
        .data-table th, .data-table td {{
            border: 1px solid #ddd;
            text-align: left;
            padding: 8px;
        }}
        .data-table th {{
            background-color: #1D8649;
            color: white;
            font-size: 12px;
        }}
        .data-table tr:nth-child(even) {{
            background-color: #f9f9f9;
        }}
        .data-table tr:hover {{
            background-color: #f1f1f1;
        }}
        .custom-table {{
            width: 100%;
            border-collapse: separate;
            border-spacing: 0;
            border-radius: 10px;
            overflow: hidden;
            margin: 20px 0;
        }}
        .custom-table th, .custom-table td {{
            padding: 10px 15px;
            font-size: 10px;
        }}
        .custom-table th {{
            background-color: #1D8649;
            color: white;
            font-size: 12px;
            padding: 10px 15px;
        }}
        .custom-table tr {{
            border-bottom: 1px solid #dddddd;
        }}
        .custom-table tr:nth-child(even) {{
            background-color: #f2f2f2;
        }}
    </style>
</head>
<body>
    <table style="width: 100%; margin-bottom: 20px">
        <tbody>
            <tr>
                <td colspan="2" style="padding: 0;">
                    <div class="info">
                        <h2>Detalles del radicado</h2>
                    </div>
                </td>
                <td style="text-align: right; width: 50%;">
                    <img src="{src_base64}" class="logo" alt="Logo">
                </td>   
            </tr>
        </tbody>
    </table>

     <table class="details-table">
        <tr>
            <td class="header">Datos del Usuario</td>
            <td class="header">Datos del Agente</td>
        </tr>
        <tr>
            <td style="padding: 8px; font-size: 14px; line-height: 18px;">
                <div class="data-value"><strong>Nombre del ciudadano:</strong> {nombre_ciudadano}</div>
                <div class="data-value"><strong>Documento del ciudadano:</strong> {documento_ciudadano}</div>
                <div class="data-value"><strong>Fecha del radicado:</strong> {fecha_radicado}</div>
            </td>
            <td style="padding: 8px; font-size: 14px; line-height: 18px;">
                <div class="data-value"><strong>Agente asignado:</strong> {encargado}</div>
                <div class="data-value"><strong>Fecha de la respuesta:</strong> {fecha_respuesta}</div>
            </td>
        </tr>
    </table>

    <table class="details-table">
        <tr>
            <td><strong>Radicado Número</strong></td>
            <td>{num_radicado}</td>
        </tr>
        <tr>
            <td><strong>Fecha de Radicado</strong></td>
            <td>{fecha_radicado}</td>
        </tr>
         <tr>
            <td><strong>Categoría</strong></td>
            <td>{categoria}</td>
        </tr>
        <tr>
            <td><strong>Tipo de PQRSF</strong></td>
            <td>{tipo_pqrsf}</td>
        </tr>
        <tr>
            <td><strong>Estado de la solicitud</strong></td>
            <td>{nomstatus}</td>
        </tr>
        <tr>
            <td><strong>Descripción de la solicitud</strong></td>
            <td>{radicado}</td>
        </tr>
        <tr>
            <td><strong>Respuesta de la solicitud</strong></td>
            <td>{respuesta_encargado}</td>
        </tr>
    </table>


        <h3>Eventos y Registros</h3>
        <table class="custom-table">
            <thead>
                <tr>
                    <th>Evento</th>
                    <th>Descripción</th>
                    <th>Usuario</th>
                    <th>Fecha</th>
                </tr>
            </thead>
            <tbody>
                {logs_html}
            </tbody>
        </table>

        <div style="text-align: left; margin-top: 20px;">
            <h5><span style="color: #1d8649; font-size: 12px;">Fecha de creación del reporte:</span> {fechaYHora}</h5>
        </div>
    </body>
    </html>
    """

    # Generar el PDF usando WeasyPrint
    html = HTML(string=html_content)
    pdf = html.write_pdf()

    num_radicado = result['num_radicado']
    filename = f"PQRSF_{num_radicado}.pdf"

    # Enviar el PDF como respuesta directamente sin guardarlo en archivo
    return pdf


