using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AX.MessageSystem;
using System;
using AX.NetworkSystem;

public class ObjDelete : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnEnable()
    {
        MessageDispatcher.AddListener("DELETE_COMMAND", ObjDeleted);
        //MessageDispatcher.AddListener("DELETE_ALL_COMMAND", DeletedAllObj);
    }

    void OnDisable()
    {
        MessageDispatcher.RemoveListener("DELETE_COMMAND", ObjDeleted);
        //MessageDispatcher.RemoveListener("DELETE_ALL_COMMAND", DeletedAllObj);
    }

    void OnDestroy()
    {
        MessageDispatcher.RemoveListener("DELETE_COMMAND", ObjDeleted);
        //MessageDispatcher.RemoveListener("DELETE_ALL_COMMAND", DeletedAllObj);
    }

    private void ObjDeleted(IMessage obj)
    {
        if (SelectedObjs.selectedObj == gameObject)
        {
            if (GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.fireNormal)
            {

                if (gameObject.GetComponent<FireSpreadCtrl>())
                {
                    if (gameObject.GetComponent<FireSpreadCtrl>().fireAttribute.spreadWay != SpreadWay.None)
                    {
                        LoadPromptWin.Instance.LoadTextPromptWindow("开始蔓延的火不能删除!", 1f);
                        return;
                    }
                }
                //if (GameSettings.othersSettings.isStartDrill)
                //{
                //    LoadPromptWin.Instance.LoadTextPromptWindow("开始演练后不能删除!", 1f);
                //    return;
                //}
                //如果演练开始手动删除灾情,通知修改火堆信息
                if (GameSettings.othersSettings.IsStartDrill)
                {
                    if (gameObject.GetComponent<FireSpreadCtrl>())
                    {
                        MessageDispatcher.SendMessage("FireNormalNumChasnge", false);
                    }
                }
                DeleteObj();
            }
            else if (GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.OrdinaryHose)
            {
                GameObject start = gameObject.GetComponent<ParentLinesMessage>().StartHitGameObj;
                GameObject end = gameObject.GetComponent<ParentLinesMessage>().EndHitGameObj;
                if(end!=null)
                {//可能先把连接物体删除然后导致结尾物体为空
                    if (CheckWorkType(end, start) == false)
                    {
                        LoadPromptWin.Instance.LoadTextPromptWindow("不能删除该管线", 1f);
                        return;
                    }
                }
                //MessageDispatcher.SendMessage("DelectWaterHose");
                var arg = new HoseConnectOrDelectData();
                arg.StartId = start.GetComponent<BaseGameObjInfo>().gameObjID;
                if(end!=null)
                {
                    arg.EndId = end.GetComponent<BaseGameObjInfo>().gameObjID;
                }
                arg.HoseId = gameObject.GetComponent<BaseGameObjInfo>().gameObjID;
                arg.Isconnect = false;
                MessageDispatcher.SendMessage("HOSE_CONNECT_OR_DELECT", arg);
                DeleteObj();
            }
            else if (GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.WaterCannon)
            {
                if (gameObject.GetComponent<WaterConnonController>().Skill != WaterCannonSkill.None)
                {
                    LoadPromptWin.Instance.LoadTextPromptWindow("不能删除该水炮", 1f);
                    return;
                }
                //删除可回收工具,当前UI隐藏以及工具回收
                MessageDispatcher.SendMessage("DelectExpendTool", gameObject);
                DeleteObj();
            }
            else if (GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.SnowCannon)
            {
                if (gameObject.GetComponent<SnowConnonController>().Skill != SnowCannonSkill.None)
                {
                    LoadPromptWin.Instance.LoadTextPromptWindow("不能删除该暴风雪炮", 1f);
                    return;
                }
                //删除可回收工具,当前UI隐藏以及工具回收
                MessageDispatcher.SendMessage("DelectExpendTool", gameObject);
                DeleteObj();
            }
            else if (GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.FirefightingRobot)
            {
                if (gameObject.GetComponent<FireRobotController>().WorkType == FireRobotSkill.出水 ||
                    gameObject.GetComponent<FireRobotController>().WorkType == FireRobotSkill.出泡沫 ||
                    gameObject.GetComponent<FireRobotController>().WorkType == FireRobotSkill.铺设水带)
                {
                    LoadPromptWin.Instance.LoadTextPromptWindow("不能删除该灭火机器人", 1f);
                    return;
                }
                if(gameObject.GetComponent<FireRobotLayWaterHose>().GetSelfConsumedLength()>0)
                {
                    LoadPromptWin.Instance.LoadTextPromptWindow("请先收起管线", 1f);
                    return;
                }
                //删除可回收工具,当前UI隐藏以及工具回收
                MessageDispatcher.SendMessage("DelectExpendTool", gameObject);
                DeleteObj();
            }
            else if (GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.WaterCurtainHose)
            {
                //删除可回收工具,当前UI隐藏以及工具回收
                MessageDispatcher.SendMessage("DelectExpendTool", gameObject);
                //删除绑定的水源车上的水幕水带
                WaterCarBindCurtainHose waterCarBindCurtainHose = new WaterCarBindCurtainHose();
                waterCarBindCurtainHose.WaterSourceObjId = GetComponent<WaterCurtainHoseSkillCtrl>().waterSourceGameObjId;
                waterCarBindCurtainHose.WaterCurtainHose = gameObject;
                waterCarBindCurtainHose.isConnect = false;
                MessageDispatcher.SendMessage("WATERCAR_DESTORY_CURTAINHOSE", waterCarBindCurtainHose);
                DeleteObj();
            }
            else
            {
                DeleteObj();
            }
        }

        //选中消防人员删除处理
        if (SelectedObjs.selectedCharacters.Contains(gameObject))
        {
            //var msg = GetComponent<FireManMessage>();
            //if (msg && msg.group != null)
            //{
            //    ResourceLoadWindow.Instance.LoadTextHintWindow("已经编组,不能删除", 1f);
            //}
            //else
            //{
            //    if (msg) //如果是消防人员,就删除铺设的管线
            //    {
            //        gameObject.GetComponent<LayWaterHoseToggle>().Pack();
            //        gameObject.GetComponent<LayWaterHoseToggle>().DeleteParent();
            //        gameObject.GetComponent<LayFlarePath>().Pack();
            //        gameObject.GetComponent<LayFlarePath>().DeleteParent();
            //    }
            //    DeleteObj();
            //}
        }
    }

    //接收到删除所有物体命令时的处理脚本
    private void DeletedAllObj(IMessage msg)
    {
        DeleteObj();
    }

    private void DeleteObj()
    {
        //删除同步命令
        if (GameSettings.othersSettings.mode != Mode.DisasterManagement)
        {
            BaseNetworkSyncDate arg = new BaseNetworkSyncDate();
            arg.SendUserID = CurrentUserInfo.mySelf.Id;
            arg.gameObjID = gameObject.GetComponent<BaseGameObjInfo>().gameObjID;
            NetworkManager.Default.SendAsync("OBJ_DELECT_SYNC", arg);
        }
        EntitiesManager.Instance.DeleteObj(gameObject);
        //MessageDispatcher.SendMessage("DELE_HEAD_NAME", (object)gameObject.name);//删除对应的UI名称显示
    }

    private bool CheckWorkType(GameObject endobj, GameObject startobj)
    {
        bool can = true;
        //如果是消防员,并且在出水
        if (endobj.GetComponent<FireManControl>() && endobj.GetComponent<FireManControl>().workType == FireManSkills.SprayWater)
        {
            can = false;
        }
        else if (endobj.GetComponent<FireManControl>() && endobj.GetComponent<FireManControl>().workType == FireManSkills.LayWaterHose)
        {
            can = false;
        }
        ///车在喷水
        else if (endobj.GetComponent<TruckBindWaterSource>())

        {
            if ((endobj.GetComponent<TruckMessage>().NowSkill == TruckSkills.喷水 ||
            endobj.GetComponent<TruckMessage>().NowSkill == TruckSkills.喷泡沫) ||
            (endobj.GetComponent<WaterSource>() && endobj.GetComponent<WaterSource>().TotalFlow > 0/*&&startobj.GetComponent<WaterSource>().HasWaterSelfAndLine*/))
            {
                can = false;
            }

        }
        //移动水泡喷水
        else if (endobj.GetComponent<WaterConnonController>() &&
            (
            endobj.GetComponent<WaterConnonController>().Flow > 0
            ))
        {
            can = false;
        }
        else if (endobj.GetComponent<SnowConnonController>() &&
            (
             endobj.GetComponent<SnowConnonController>().Flow > 0
            ))
        {
            can = false;
        }
        else if (endobj.GetComponent<FireRobotController>())
        {
            //Transform P_FireRobotFollowHose = GameObject.Find("P_AllParent/P_Tools/P_FireRobotFollowHose").transform;
            //if (P_FireRobotFollowHose.Find(endobj.name).childCount > 0)
            //{
            //    can = false;
            //}
            if (endobj.GetComponent<FireRobotLayWaterHose>().GetSelfConsumedLength()>0.2f)
            {
                can = false;
            }
            if (endobj.GetComponent<FireRobotController>().Flow > 0)
            {
                can = false;
            }
        }
        return can;
    }
}