// Learn TypeScript:
//  - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html

import MapConroler from "../Map";
import NumberToImage from "../NumberToImage";

const { ccclass, property } = cc._decorator;



@ccclass
export default class Lock extends cc.Component {
    static _instance: any;
    time: number = 0;
    type: string = "block"
    // mapInfo: number[][] = [];

    onLoad() {

    }

    start() {
    }

    init(time, type, block) {
        if (time) this.time = time;
        if (type) this.type = type;
        this.node.getChildByName("icon").getChildByName("time").active = true;
        NumberToImage.numberToImageNodes(this.time, 20, 8, "lock_", this.node.getChildByName("icon").getChildByName("time"), false);
        let lock = this.node.getChildByName("lock");
        if (block != null) {
            switch (block) {
                case 0:
                    lock.getChildByName("lock_1").active = true;
                    break;
                case 1:
                    lock.getChildByName("lock_2").active = true;
                    break;
                case 2:
                    lock.getChildByName("lock_3").active = true;
                    break;
                case 3:
                    lock.getChildByName("lock_4").active = true;
                    break;
                case 4:
                    lock.getChildByName("lock_10").active = true;
                    break;
                case 5:
                    lock.getChildByName("lock_5").active = true;
                    break;
                case 6:
                    lock.getChildByName("lock_6").active = true;
                    break;
                case 7:
                    lock.getChildByName("lock_7").active = true;
                    break;
                case 8:
                    lock.getChildByName("lock_8").active = true;
                    lock.getChildByName("lock_8").scaleX = -1;
                    break;
                case 9:
                    lock.getChildByName("lock_9").active = true;
                    lock.getChildByName("lock_9").scaleX = -1;
                    break;
                case 10:
                    lock.getChildByName("lock_8").active = true;
                    lock.getChildByName("lock_8").scaleY = -1;
                    lock.getChildByName("lock_8").scaleX = -1;
                    lock.getChildByName("lock_8").y += 12;
                    lock.getChildByName("lock_8").x -= 2;
                    break;
                case 11:
                    lock.getChildByName("lock_9").active = true;
                    lock.getChildByName("lock_9").scaleY = -1;
                    lock.getChildByName("lock_9").y += 2;
                    lock.getChildByName("lock_9").x -= 2;
                    break;
                case 12:
                    lock.getChildByName("lock_8").active = true;
                    lock.getChildByName("lock_8").x += 1;
                    break;
                case 13:
                    lock.getChildByName("lock_9").active = true;
                    lock.getChildByName("lock_9").x -= 3;

                    break;
                case 14:
                    lock.getChildByName("lock_4").active = true;
                    lock.getChildByName("lock_4").scaleY = -1;
                    lock.getChildByName("lock_4").y += 10;
                    break;
                case 15:
                    lock.getChildByName("lock_4").active = true;
                    lock.getChildByName("lock_4").y -= 1;
                    break;
                case 16:
                    lock.getChildByName("lock_3").active = true;
                    lock.getChildByName("lock_3").scaleX = -1;
                    break;
                case 17:
                    lock.getChildByName("lock_3").active = true;
                    break;
                case 18:
                    lock.getChildByName("lock_2").active = true;
                    break;
                case 19:
                    lock.getChildByName("lock_4").active = true;
                    lock.getChildByName("lock_4").y -= 10;
                    break;
                case 20:
                    lock.getChildByName("lock_4").active = true;
                    lock.getChildByName("lock_4").scaleX = -1;
                    lock.getChildByName("lock_4").y -= 8;
                    break;
                case 21:
                    lock.getChildByName("lock_4").active = true;
                    lock.getChildByName("lock_4").scaleY = -1;
                    lock.getChildByName("lock_4").scaleX = -1;
                    lock.getChildByName("lock_4").y += 18;
                    break;
                case 22:
                    lock.getChildByName("lock_4").active = true;
                    lock.getChildByName("lock_4").scaleY = -1;
                    lock.getChildByName("lock_4").y += 18;
                    break;
            }
        }

    }

    reduce() {
        if (this.type == "block") {
            if (this.node.parent) {
                if (this.node.parent.getComponent("Block").floor) {
                    return;
                }
            }
        }
        this.time -= 1;
        NumberToImage.numberToImageNodes(this.time, 20, 8, "lock_", this.node.getChildByName("icon").getChildByName("time"), false);
        cc.fx.GameTool.numberScaleAction(this.node.getChildByName("icon").getChildByName("time"));
        if (this.time <= 0) {
            if (this.type == "block") {
                if (this.node.parent) this.node.parent.getComponent("Block").type = 0;
            }
            else if (this.type == "wall") {
                this.node.parent.getChildByName("wall").getComponent("Wall").specialBackup = 0;
                if (this.node.parent.getChildByName("wall").getComponent("Wall").special == 6) {
                    if (this.node.parent) {
                        this.node.parent.getChildByName("wall").getComponent("Wall").special = 0;
                    }
                }
            }
            this.node.destroy();
            this.node.removeFromParent();
        }
    }

    // update (dt) {}
}
