import datetime
import json
import traceback
import requests

from flask import jsonify
from lib.Stech import Logger, Stech
from sqlalchemy.orm import aliased


from src.models.recuperautos.GruposUsuarios import GruposUsuario
from src.models.recuperautos.ReportesPatente import ReportesPatente

class LoadInfoVehicle():

    @classmethod
    def load_data_vehicle(self):
        result_list = []
        session = Stech.get_session('produccion')
        try:
            rpat = aliased(ReportesPatente)
            gru = aliased(GruposUsuario)

            with session:
                query = (
                    session.query(
                        gru.nombre,
                        rpat.rpat_info,
                        rpat.rpat_id
                    )
                    .select_from(rpat)
                    .join(gru, gru.id_grupo == rpat.group_id)
                    .filter(gru.tipo_grupo == "reportes")  # Ajuste en la condición de filtro
                )

                result = query.all()

            for row in result:

                if not all(key in row[1] and row[1][key] for key in ['Color', 'Marca', 'Modelo']):
                    url = "https://api.carcloud.cl/get-patent-recuperauto"

                    payload = json.dumps({
                        "patent": row[0]
                    })
                    headers = {
                        'Content-Type': 'application/json'
                    }

                    response = requests.request("POST", url, headers=headers, data=payload)

                    json_info = json.loads(response.text)

                    print(f"ID: {row[2]} ")
                    
                    if not "success" in json_info:

                        color = json_info['color'].upper()
                        marca = json_info['marca'].upper()
                        modelo = json_info['modelo'].upper()

                        print(f"ID: {row[2]} ---> {color} - {marca} - {modelo} -- {json_info['patente']}")

                        new_rpat_info = {
                            "Color": color,
                            "Marca": marca,
                            "Modelo": modelo,
                            "Observacion": "",
                        }
                        
                        object_rp = session.query(ReportesPatente).filter_by(rpat_id=int(row[2])).first()
                        object_rp.rpat_info = json.dumps(new_rpat_info)
                        session.commit()

                        Logger.add_to_log("success", f"ID: {row[2]} - {json_info['patente']}, se actualizo campo rpat_info a: {json.dumps(new_rpat_info)}", "LoadInfoVehicle")

            return result_list

        except Exception as ex:
            Logger.add_to_log("error", str(ex))
            Logger.add_to_log("error", traceback.format_exc())
            response = jsonify(
                {'message': "Internal Server Error", "error": f"{str(ex)} - {str(traceback.format_exc())}", 'success': False})
            return response, 500
