import { _decorator, Component, EventTouch, Node, Rect, Sprite, UITransform, v2, Vec2, Vec3 } from 'cc';
import { widget_base } from './widget_base';
import { att_drag_data, widget_item_data } from '../../../data/data';
import { gameManager } from '../gameManager';
const { ccclass, property } = _decorator;

@ccclass('widget_drag')
export class widget_drag extends widget_base {
    @property(Node) img_zhaobutong:Node = null;
    private mDragData:att_drag_data = null;
    private mIsStartMove:boolean = false;
    private offset_x:number = 0;
    private offset_y:number = 0;
    private mDragRect:Rect = null;
    private other_drag_list:att_drag_data[] = [];
    protected init(){
        if(this.mData.att.drag_data!=null){
            this.mDragData = this.mData.att.drag_data
        }
        if(this.mData.att.drag_data.other_drag_list!=undefined){
            for (let index = 0; index <  this.mData.att.drag_data.other_drag_list.length; index++) {
                const element =  this.mData.att.drag_data.other_drag_list[index];
                let item = new att_drag_data;
                item.drag_pos_x = element.drag_pos_x;
                item.drag_pos_y = element.drag_pos_y;
                item.other_event_id = element.other_event_id;
                item.drag_size_width = element.drag_size_width;
                item.drag_size_height = element.drag_size_height;
                this.other_drag_list.push(item)
            }
        }

    }
    protected start(): void {
        if(this.mIsActive&&this.isInit){
            this.registeredEvent()
        }
    }
    protected registeredEvent(): void {
        this.node.on(Node.EventType.TOUCH_START,(et:EventTouch)=>{
            if(!this.mIsActive) return
            this.mIsStartMove = true;
            let p = new Vec3(et.getUILocation().x,et.getUILocation().y)
            let n_p = this.node.parent.getComponent(UITransform).convertToNodeSpaceAR(p)
            this.node.position = new Vec3(n_p.x,n_p.y);
        })
        this.node.on(Node.EventType.TOUCH_MOVE,(et:EventTouch)=>{
            if(!this.mIsActive) return
                let p = new Vec3(et.getUILocation().x,et.getUILocation().y)
                let n_p = this.node.parent.getComponent(UITransform).convertToNodeSpaceAR(p)
                this.node.position = new Vec3(n_p.x,n_p.y);
        })

        this.node.on(Node.EventType.TOUCH_END,()=>{
            this.onEndEvent()
        })
    }


    private onEndEvent(){
        if(!this.mIsActive) return
        this.mIsStartMove = false;
        this.checkOnecFinish()
    }

    private checkOther(){
        if(this.mDragData.other_drag_list==undefined){
            return false;
        }
        let isCheck = false;
        if(this.other_drag_list.length>0){
            for (let index = 0; index < this.other_drag_list.length; index++) {
                const item_data = this.other_drag_list[index];
                let w = item_data.drag_size_width;
                let h = item_data.drag_size_height;
                let pos =  new Vec3(this.mData.att.x+item_data.drag_pos_x,this.mData.att.y+item_data.drag_pos_y)
                let rect = new Rect(pos.x-w*0.5,pos.y-h*0.5,w,h)
                let p = this.node.position;
                let is = rect.contains(new Vec2(p.x,p.y))
                if(is){
                    if(item_data.other_event_id!=-1){
                        this.offEvent()
                        console.log("item_data.other_event_id",item_data.other_event_id)
                        gameManager.Singleton.exeEvent(item_data.other_event_id)
                        isCheck = true;
                        break;
                    }
                  
                }
            }
        }
        return isCheck;
    }

    checkOtherListenWidgetFinish(){
        let is_finish = true;
        if(this.mDragData.other_widget_finish_listen_list==undefined){
            return true
        }
        if(this.mDragData.other_widget_finish_listen_list.length<=0){
            return true;
        }
        let event_id = gameManager.Singleton.checkWidgetList(this.mDragData.other_widget_finish_listen_list)
        if(event_id==-1){
            is_finish = true;
        }else{
            is_finish = false;
            gameManager.Singleton.exeEvent(event_id)
        }
        return is_finish;
    }

    public deleteOtherDrag(index:number){
        this.other_drag_list.splice(index,1)
    }

    private checkOnecFinish(){
        if(this.checkMoveToDragRect()){
            this.mIsStartMove = false;
            if(this.checkOtherListenWidgetFinish()){
                this.onFinishEvent()
            }else{

            }
        }else{

            if(this.checkOther()){
                this.mIsStartMove = false;
            }else{
                if(this.mDragData.is_err_drag_back){
                    this.node.position = new Vec3(this.mData.att.x,this.mData.att.y)
                }
            }
 
        }

    }

    public getDragRect():Rect{
        if(this.mDragData==null){
            this.mDragData = this.mData.att.drag_data
        }
        let w = this.mDragData.drag_size_width;
        let h = this.mDragData.drag_size_height;
        let pos =  new Vec3(this.mData.att.x+this.mDragData.drag_pos_x,this.mData.att.y+this.mDragData.drag_pos_y)
        this.mDragRect = new Rect(pos.x-w*0.5,pos.y-h*0.5,w,h)
        return this.mDragRect;
    }

    private checkMoveToDragRect():boolean{
        let p = this.node.position;
        let is = this.getDragRect().contains(new Vec2(p.x,p.y))
        return is
    }

    protected onFinishAnimation(): void {
        this.icon.position = new Vec3(this.mData.att.x,this.mData.att.y)
        // node.setSiblingIndex(node.parent.childrenCount - 1); 
        // this.icon.setSiblingIndex(999)
    }

    public showZhaoButongFinishStatus(): void {
        gameManager.Singleton.sys_click_correct_detail_music()
        this.img_zhaobutong.active = true;
        this.icon.position = new Vec3(this.mData.att.x,this.mData.att.y)
    }

    public hideZhaoButongFinishStatus(): void {
        if(this.img_zhaobutong != null) {
            this.img_zhaobutong.active = false;
        }
    }

    public toFinishEvent(){
        this.onFinishEvent()
    }
}


