#
# <one line to give the program's name and a brief idea of what it does.>
# SPDX-FileCopyrightText: 2022 gothic <email>
# SPDX-License-Identifier: GPL-3.0-or-later
#

from flask import jsonify
import requests
from urllib.parse import quote, unquote

# import grpc
# import base64
# import json
# import re
# import uuid

# from datetime import datetime

# from google.protobuf.json_format import MessageToJson

class SingletonMetaCdn(type):
  _instances = {}

  def __call__(cls, *args, **kwargs):
    if cls not in cls._instances:
      instance = super().__call__(*args, **kwargs)
      cls._instances[cls] = instance
    return cls._instances[cls]


class CDN():
  
  HOST_SRV_CDN_API_REST = "http://cdn-akamai-api-rest.cdn.svc.cluster.local:5000"
  # HOST_SRV_DAO = "dao-csharp-grpc-svc:8445"

  _message_success = ""
  _path_app = ""
  _request = {}
  _original_data = None
  _original_params = {}
  _remaining_path = None

  def __init__(self, request: dict, PATH_APP: str, remaining_path: str) -> None:
    # print(remaining_path)
    self._path_app = PATH_APP
    self._request = request
    self._original_params = request.args.to_dict()
    self._original_data = request.get_json() if request.is_json else None
    self._remaining_path = remaining_path

  def main(self):

    print(self.HOST_SRV_CDN_API_REST + "/" + self._remaining_path)

    print(self._original_params)
    print(self._original_data)

    try:
      # Reenviar la solicitud al microservicio
      if self._request.method == 'GET':
        response = requests.get(self.HOST_SRV_CDN_API_REST + "/" + self._remaining_path, params=self._original_params)
      elif self._request.method == 'POST':
        response = requests.post(self.HOST_SRV_CDN_API_REST + "/" + self._remaining_path, params=self._original_params, json=self._original_data)
      elif self._request.method == 'PUT':
        response = requests.put(self.HOST_SRV_CDN_API_REST + "/" + self._remaining_path, params=self._original_params, json=self._original_data)
      elif self._request.method == 'DELETE':
        response = requests.delete(self.HOST_SRV_CDN_API_REST + "/" + self._remaining_path, params=self._original_params)
      elif self._request.method == 'PATCH':
            response = requests.patch(self.HOST_SRV_CDN_API_REST + "/" + self._remaining_path, params=self._original_params, json=self._original_data)
      else:
        return jsonify({'error': 'Método HTTP no admitido'}), 408
      # Devolver la respuesta del microservicio al frontend
      return jsonify(response.json()), response.status_code
    except requests.exceptions.RequestException as e:
      # Manejar errores de la solicitud al microservicio
      return jsonify({'error': 'Error al conectar con el microservicio'}), 500
      #return jsonify({'status': 'failed', 'message': 'fallo'}), 200
