// Learn TypeScript:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/typescript.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html

import GameData from "./GameData";
import SoundManager from "./SoundsManager";

const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    @property(cc.Prefab)
    alienship1: cc.Prefab = null;

    @property(cc.Prefab)
    alienship2: cc.Prefab = null;

    @property(cc.Prefab)
    alienship3: cc.Prefab = null;

    spawnShips() {
        var ships = [this.alienship1, this.alienship2, this.alienship3];
        var randomShip = Math.floor(Math.random() * ships.length);
        var RTL = Math.random() < 0.5;
        var shipPrefab = ships[randomShip];
        
        const batchMoveAmountX = Math.random() * 200 + 200;
        
        const shipY = this.node.getContentSize().height * 0.95;
        
        const screenHalfWidth = this.node.getContentSize().width / 2;
        const shipMaxMove = batchMoveAmountX;
        const margin = 0;
        const shipXMin = -screenHalfWidth + shipMaxMove + margin;
        const shipXMax = screenHalfWidth - shipMaxMove - margin;
        const shipX = Math.random() * (shipXMax - shipXMin) + shipXMin;
        
        const randomNumber = Math.ceil(Math.random() * 10);
        const specialItem = randomNumber%2 === 0 ? null : randomNumber%3 === 0 ? 'health' : 'rocket';
        const specialItemIndex = Math.floor(Math.random() * GameData.instance.enemySpawnInterval);    
        
        for (let i = 0; i < GameData.instance.enemySpawnInterval; i++) {
            this.scheduleOnce(() => {
                const ship = cc.instantiate(shipPrefab);
                ship.setPosition(shipX, shipY);
                this.node.addChild(ship);

                const shipScript = ship.getComponent('EnemyShip');
                shipScript.moveAmountX = batchMoveAmountX;
                shipScript.RTL = RTL;

                if(i === specialItemIndex && specialItem !== null) {
                    shipScript.specialItem = specialItem;
                }

            }, i * GameData.instance.enemyMoveTime * 0.25);
        }
    }

    onLoad () {
        var manager = cc.director.getCollisionManager();
        manager.enabled = true;

        SoundManager.instance.playMusic('Dududum', true);
    }

    start () {
        this.schedule(this.spawnShips, GameData.instance.selectedLevel * 3, cc.macro.REPEAT_FOREVER, 1);
    }

    // update (dt) {}
}