class Http():
    def __init__(self):
        self.cf = Config()
        self.timeout=float(self.cf.get_http('time_out'))
        self.logger = Log.get_logger()
        self.env = self.url=''
        self.headers = self.params = self.data = self.files = {}

    def set_env(self, env):
        self.env = env

    def set_url(self, request_url):
        if self.env.upper() == 'DEV':
            base_url = self.cf.get_dev("base_url")
        elif self.env.upper() == 'TEST':
            base_url = self.cf.get_test("base_url")
        self.url = base_url + request_url

    def set_headers(self, data_type):
        if data_type == 'FORM':
            self.headers = {"Content-Type": "application/x-www-form-urlencoded"}
        elif data_type == 'JSON':
            self.headers = {"Content-Type": "application/json"}
    
    def set_params(self, request_params):
        self.params = {}
        for key_value in request_params.split("&"):
            key = key_value.split("=")[0]
            self.params[key] = key_value.split("=")[1]

    def set_data(self, request_data):
        if request_data.startswith('{'):
            self.data = json.dumps(json.loads(request_data))
        else:
            self.data = {}
            for key_value in request_data.split("&"):
                key = key_value.split("=")[0]
                self.data[key] = key_value.split("=")[1]

    def set_files(self, request_file):
        self.files = {request_file.split(":")[0]:request_file.split(":")[1]}


    def get(self):
        try:
            resp = requests.get(url=self.url, headers=self.headers, params=self.params, data=self.data, files=self.files, timeout=self.timeout)
            logger.debug(json.dumps(self.data))
            return resp
        except TimeoutError:
            self.logger.error("Time out!")
        

    def post(self):
        try:
            resp = requests.post(url=self.url, headers=self.headers, params=self.params, data=self.data, files=self.files, timeout=self.timeout)
            self.logger.debug(json.dumps(self.data, ensure_ascii=False))
            return resp
        except TimeoutError:
            self.logger.error("Time out!")