# update: 2022-6-24
"""
海康人脸摄像机接口

    提供 read 1、read 100,两种方法
"""
import requests
import datetime
import time

import sys
import importlib

# sys.path.append('/home/server/projects/taiwuict/cscec-8bur-vms/supplement-python')
sys.path.append(r'D:\share\gitee\taiwuict.cscec-8bur-vms\supplement-python')  # for pc
methods = importlib.import_module(f"libraries.base_original")


class API(object):

    def __init__(self):
        self.camera_ipv4 = None
        self.camera_user = None
        self.camera_pass = None
        self.client = None
        self.last_receive_at = None

    def connect_camera(self, camera_ipv4, camera_user, camera_pass):
        """
        连接摄像机
        """
        self.camera_ipv4 = camera_ipv4
        self.camera_user = camera_user
        self.camera_pass = camera_pass
        session = requests.session()
        request_url = f'http://{self.camera_ipv4}:80/ISAPI/Event/notification/alertStream'  # 设置认证信息
        auth = requests.auth.HTTPDigestAuth(self.camera_user, self.camera_pass)  # 发送请求,获取响应
        self.client = session.get(request_url, auth=auth, verify=False, stream=True)

    def throw(self, backdata, image_hex):
        """
        回传数据
        """
        if backdata is None:
            return
        if self.camera_ipv4 not in backdata:
            backdata[self.camera_ipv4] = dict()
        object_id = str(time.time())
        backdata[self.camera_ipv4][object_id] = dict()
        backdata[self.camera_ipv4][object_id]['tracking_is'] = False
        backdata[self.camera_ipv4][object_id]['hex_image'] = image_hex

    def read1(self, backdata=None):
        """
        """
        # --- define ---
        image_hex = str()
        start_is = False
        print_is = False
        hex_start = ''
        hex_end = ''

        while True:

            # --- get ---
            line = self.client.raw.read(1)
            line = line.hex()

            # --- fill ---
            now_at = time.time()
            if not self.last_receive_at:
                self.last_receive_at = now_at
            if line:
                self.last_receive_at = now_at

            # --- fill ---
            hex_start += line

            # --- check ---
            if len(hex_start) > 8:
                hex_start = hex_start[-8:]

            # --- check ---
            if '0d0affd8' == hex_start:
                start_is = True
                image_hex = 'ff'
                methods.debug_log('hikvision_detector',
                                  f"m-44: 0d0affd8 is {datetime.datetime.now().strftime('%H:%M:%S.%f')}")

            # --- fill ---
            if start_is:
                image_hex += line

            # --- check ---
            if start_is:

                hex_end += line

                if len(hex_end) > 8:
                    hex_end = hex_end[-8:]

                if 'ffd90d0a' == hex_end:
                    print_is = True
                    image_hex = image_hex[:-4]
                    methods.debug_log('hikvision_detector',
                                      f"m-44: ffd90d0a is {datetime.datetime.now().strftime('%H:%M:%S.%f')}")

            # --- fill ---
            if print_is:
                self.throw(backdata, image_hex)
                image_hex = str()
                hex_start = str()
                hex_end = str()
                start_is = False
                print_is = False


if __name__ == '__main__':
    # --- init ---
    middledata = {}
    agent = API()
    agent.connect_camera(camera_ipv4='192.168.0.181', camera_user='admin', camera_pass='DEVdev123')
    agent.read1({})