# -*- coding: utf-8 -*-
import os
import urllib
import zlib
import urllib.parse
import urllib.error
import mitmproxy
from mitmproxy import http
import base64
import json
from garbevents.settings import Settings as ST


class GetData:
    """
    A mitmproxy HTTP request class.
    """
    events_list = []

    @staticmethod
    def chunks(arr, n):
        return [arr[i:i + n] for i in range(0, len(arr), n)]

    def request(self, flow: mitmproxy.http.HTTPFlow):
        """

        :param flow:
        :return:
        """

        request_data = flow.request
        self.request_url = request_data.url
        if ST.url in self.request_url:
            print("url:-------->", self.request_url)
            api = self.request_url.split('/')[3].replace("'", '')
            print("拆分后获取API地址====>", api)
            if api in ST.interface_url:
                request_content = str(flow.request.content).split("event=")[1].replace("'", '').replace(' ', '+')
                print("拆分后获取加密数据====>", request_content)
            else:
                request_content = str(flow.request.url).split('&')[1].split('event=')[1]
                print("拆分后获取加密数据====>", request_content)
            if request_content.find('%') == 0:
                result = urllib.parse.unquote(request_content)
            else:
                url_content = urllib.parse.unquote(request_content)
                a = base64.b64decode(url_content)
                result = zlib.decompress(a).decode('utf-8')
            result_list = json.loads(result)
            try:
                event = result_list["data"][0]["pr"]["$eid"]
                print("解密数据后获取事件名====>", event)
                self.events_list.append(event)
            except KeyError:
                print("暂无事件!")
            event_list = list(set(self.events_list))
            if not os.path.exists(ST.report_path):
                os.mkdir(ST.report_path)
            file = open('{}/now_event.txt'.format(ST.report_path), 'w')
            for line in event_list:
                file.write(line + '\n')
            print("事件名集合====>", event_list)
            lost_list = list(set(ST.all_events).difference(set(event_list)))
            print("丢失事件名====>", lost_list)
            file = open('{}/lost_event.txt'.format(ST.report_path), 'w')
            for line in lost_list:
                file.write(line + '\n')
