# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Copyright 2021 Huawei Technologies Co., Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# You may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import struct
import socket

from . import presenter_message_pb2 as pb2

def pack_message(msg_name, msg_data):
    buf = msg_data.SerializeToString()
    msg_body_len = len(buf)
    msg_name_len = len(msg_name)
    msg_total_len = msg_name_len + msg_body_len + 5
    data = b''
    msg_total_len = socket.htonl(msg_total_len)
    pack_data = struct.pack('IB', msg_total_len, msg_name_len)
    data += pack_data
    data += msg_name.encode()
    data += buf

    return data

def open_channel_request(channel_name, content_type):
    request = pb2.OpenChannelRequest()
    request.channel_name = channel_name
    request.content_type = content_type

    return pack_message(pb2._OPENCHANNELREQUEST.full_name, request)

def image_frame_request(image_width, image_height, image_data, detection_result):
    request = pb2.PresentImageRequest()
    request.format = 0
    request.width = image_width
    request.height = image_height
    request.data = image_data
    for i in range(0, len(detection_result)):
        myadd = request.rectangle_list.add()
        myadd.left_top.x = detection_result[i].box.lt.x
        myadd.left_top.y = detection_result[i].box.lt.y
        myadd.right_bottom.x = detection_result[i].box.rb.x
        myadd.right_bottom.y = detection_result[i].box.rb.y
        myadd.label_text = detection_result[i].result_text

    return pack_message(pb2._PRESENTIMAGEREQUEST.full_name, request)

def heartbeat_message():
    return pack_message(pb2._HEARTBEATMESSAGE.full_name, pb2.HeartbeatMessage())

def is_open_channel_response(msg_name):
    return (msg_name == pb2._OPENCHANNELRESPONSE.full_name)

def is_image_frame_response(msg_name):
    return (msg_name == pb2._PRESENTIMAGERESPONSE.full_name)




