from unify_api.modules.zhiwei_u.procedures.common import get_order_num
from unify_api.modules.zhiwei_u import config
from pot_libs.common.components.responses import Success
from unify_api.modules.zhiwei_u.dao.warning_operations_dao import *
from unify_api.modules.zhiwei_u.dao.order_operations_dao import \
    order_num_is_having, search_all_handle_user_dao
from unify_api.modules.zhiwei_u.components.warning_operations_cps import \
    SelectUserResp, ProductResp
from pot_libs.aiokafka_util.kafka_util import KafkaUtils


async def get_product_service(goods):
    """返回平台  工单类型  报警类型"""
    data = []
    for key, value in goods.items():
        product = {
            "id": key,
            "name": value
        }
        data.append(product)
    return ProductResp(data)


async def select_user_service(prod_id):
    """根据平台选择客户 """
    user_list = await select_user_dao(prod_id)
    return SelectUserResp(data=user_list)


async def select_point_service(cid):
    """根据平台 客户选择监测点 """
    point_list = await select_point_dao(cid)
    return SelectUserResp(data=point_list)


async def warning_state_ignore_service(ids, remark):
    """运维报警状态改变为已忽略"""
    if not ids:
        return Success(success=0, message="操作失败")
    try:
        ids = [int(i) for i in ids]
    except:
        log.info(f"warning_state_ignore_service ids:{ids}")
        return Success(success=0, message="操作失败")
    await warning_state_ignore_dao(ids, config.WARNING_IGNORE, remark)
    return Success(success=1, message="操作成功")


async def warning_state_focus_service(ids):
    """运维报警 已忽略撤销"""
    if not ids:
        return Success(success=0, message="操作失败")
    try:
        ids = [int(i) for i in ids]
    except:
        log.info(f"warning_state_focus_service ids:{ids}")
        return Success(success=0, message="操作失败")
    await warning_state_focus_dao(ids, config.WARNING_FOCUS)
    return Success(success=1, message="操作成功")


async def warning_to_order_service(ids, userid, w_origin):
    """报警信息转为工单"""
    if not ids:
        return Success(success=0, message="操作失败")
    try:
        ids = [int(i) for i in ids]
    except:
        log.info(f"warning_to_order_service ids:{ids}")
        return Success(success=0, message="操作失败")
    # 修改报警state
    await warning_state_focus_dao(ids, config.WARNING_ORDER)
    # 查询该条记录数据
    for id in ids:
        data = await get_warn_by_id(id)
        if data:
            while 1:
                # 生成工单号
                order_num = get_order_num(w_origin)
                # 判断工单号是否存在
                is_having = await order_num_is_having(order_num)
                if not is_having:
                    break
            # 插入工单表
            await insert_order_data(data, w_origin, order_num, userid)
            handle_user_list = await search_all_handle_user_dao()
            dic_data = {
                "order_num": order_num,
                "project": config.PRODUCT[data["prod_id"]],
                "point": data["monitor_name"],
                "sid": data["sid"],
                "order_content": data["warn_info"],
                "notice_content": "已生成工单,请及时接单处理",
                "user_list": [handle_user["user_id"]
                              for handle_user in handle_user_list]
            }
            await KafkaUtils.send_msg(
                topic="power_iot.push.wechat_operation_order",
                dic_data=dic_data)
    return Success(success=1, message="操作成功")