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 generate_radicados_pdf():
    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 
            ORDER BY p.fecha_radicado DESC
        """

        cursor = conexionBD.cursor(dictionary=True)
        cursor.execute(query)
        
        # Cambiar fetchone() por fetchall() para ver todos los resultados
        results = cursor.fetchall()
        cursor.close()

        # Imprimir los resultados obtenidos
        print(f"Resultados obtenidos: {results}")

        if results:
            # Si se obtienen resultados
            print(f"Se encontraron PQRSF: {results}")
            pdf_data = generate_pdf(results)  # Llamar a la función para generar el PDF
            return {
                "success": 1,
                "message": "PQRSF encontrada",
                "data": results,
                "pdf_data": pdf_data
            }
        else:
            print("No se encontraron PQRSF")  # Mensaje de depuración si no hay resultados
            return {"success": 0, "message": "No se encontraron 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(result):
  
    print("Generando PDF de radicados...")

    
    fechaYHora = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
    print(f"Fecha y hora actual: {fechaYHora}")

    # Definir la URL de la imagen del logo
    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 = ""

    # Construcción del HTML para el PDF
    html_content = f"""
    <html>
    <head>
        <style>
                body {{
                    font-family: Arial, sans-serif;
                }}
                .container {{
                    text-align: center;
                    margin-bottom: 20px;
                }}
                h2 {{
                    color: #124734;
                }}
                .custom-table {{
                    width: 100%;
                    border-collapse: separate;
                    border-spacing: 0;
                    border-radius: 35px;
                    overflow: hidden;
                    margin: 20px 0;
                }}
                .custom-table th, .custom-table td {{
                    padding: 10px 15px;
                    font-size: 10px;
                    border-bottom: 1px solid #dddddd;
                }}
                .custom-table th {{
                    background-color: #1D8649;
                    color: white;
                    font-size: 12px;
                    padding: 10px 15px;
                }}
                .custom-table tr:nth-child(even) {{
                    background-color: #f2f2f2;
                }}
                img.logo {{
                    width: 170px;
                    height: auto;
                }}
                .footer {{
                    text-align: left;
                    margin-top: 20px;
                }}
            </style>
    </head>
    <body>
        <table style='width: 100%; margin-bottom: 20px;'>
            <tr>
                <td><h2>Listado de Radicados</h2></td>
                <td style='text-align: right; width: 50%;'><img src='{src_base64}' class='logo'></td>
            </tr>
        </table>
        
        <table class='custom-table'>
            <thead>
                <tr>
                    <th>Número de radicado</th>
                    <th>Fecha de radicado</th>
                    <th>Categoría PQRSF</th>
                    <th>Ciudadano</th>
                    <th>Encargado</th>
                    <th>Fecha Respuesta</th>
                    <th>Estado</th>
                </tr>
            </thead>
            <tbody>
    """

    for row in result:
        fecha_respuesta = row['fecha_respuesta'] if row['fecha_respuesta'] not in [None, '', 'None'] else ''
        
        html_content += f"""
                <tr>
                    <td>{row['num_radicado']}</td>
                    <td>{row['fecha_radicado']}</td>
                    <td>{row['categoria']}</td>
                    <td>{row['nombre_ciudadano']}</td>
                    <td>{row['encargado']}</td>
                    <td>{fecha_respuesta}</td> 
                    <td>{row['nomstatus']}</td>
                </tr>
        """

    html_content += f"""
            </tbody>
        </table>
        <div class='footer'>
            <h5>Fecha de creación del reporte: {fechaYHora}</h5>
        </div>
    </body>
    </html>
    """

    # Generar el PDF usando WeasyPrint
    html = HTML(string=html_content)
    pdf = html.write_pdf()

    # Enviar el PDF como respuesta directamente sin guardarlo en archivo
    return pdf
