/**
 * @license Licensed under the Apache License, Version 2.0 (the "License"):
 *          http://www.apache.org/licenses/LICENSE-2.0
 */

/**
 * @fileoverview Ardublockly JavaScript for the Blockly resources and bindings.
 */
'use strict';

goog.provide('Blockly.Blocks.music');

goog.require('Blockly.Blocks');
// goog.require('Blockly.Types');

Blockly.Blocks.music.HUE = 340;

Blockly.Blocks['MusicMidiSetup'] = {
    init: function() {
        this.appendDummyInput()
            .appendField(new Blockly.FieldImage("./../blockly/media/main-music.png", 50, 40, "15"));
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_INSTRUMENT)
            .appendField(new Blockly.FieldDropdown([
                [Blockly.Msg.MUSIC_INSTRUMENT_GPIANO, "1"],
                [Blockly.Msg.MUSIC_INSTRUMENT_EPIANO, "5"],
                [Blockly.Msg.MUSIC_INSTRUMENT_MUSICBOX, "11"],
                [Blockly.Msg.MUSIC_INSTRUMENT_XYLOPHONE, "14"],
                [Blockly.Msg.MUSIC_INSTRUMENT_DRAWBARORGAN, "17"],
                [Blockly.Msg.MUSIC_INSTRUMENT_ACCORION, "22"],
                [Blockly.Msg.MUSIC_INSTRUMENT_GUITAR, "25"],
                [Blockly.Msg.MUSIC_INSTRUMENT_EGUITAR, "28"],
                [Blockly.Msg.MUSIC_INSTRUMENT_BASS, "33"],
                [Blockly.Msg.MUSIC_INSTRUMENT_VIOLIN, "41"],
                [Blockly.Msg.MUSIC_INSTRUMENT_VIOLA, "42"],
                [Blockly.Msg.MUSIC_INSTRUMENT_CELLO, "43"],
                [Blockly.Msg.MUSIC_INSTRUMENT_TRUMPET, "57"],
                [Blockly.Msg.MUSIC_INSTRUMENT_SAX, "67"],
                [Blockly.Msg.MUSIC_INSTRUMENT_PICCOLO, "73"],
                [Blockly.Msg.MUSIC_INSTRUMENT_FLUTE, "74"],
                [Blockly.Msg.MUSIC_INSTRUMENT_WHISTLE, "79"],
                [Blockly.Msg.MUSIC_INSTRUMENT_SITAR, "105"],
                [Blockly.Msg.MUSIC_INSTRUMENT_WOODBLOCK, "116"],
                [Blockly.Msg.MUSIC_INSTRUMENT_DRUM, "117"]
            ]), "INSTRUMENT");
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_VOLUME)
            .appendField(new Blockly.FieldDropdown([
                [Blockly.Msg.MUSIC_VOL_MIN, "120"],
                ["1", "100"],
                ["2", "80"],
                ["3", "60"],
                ["4", "40"],
                ["5", "20"],
                [Blockly.Msg.MUSIC_VOL_MAX, "0"]
            ]), "VOLUME");
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    }
};

Blockly.Blocks['MusicSetVolume'] = {
    init: function() {
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_VOLUME)
            .appendField(new Blockly.FieldDropdown([
                [Blockly.Msg.MUSIC_VOL_MIN, "120"],
                ["1", "100"],
                ["2", "80"],
                ["3", "60"],
                ["4", "40"],
                ["5", "20"],
                [Blockly.Msg.MUSIC_VOL_MAX, "0"]
            ]), "VOLUME");
        this.setPreviousStatement(true, null);
        this.setNextStatement(true, null);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip(Blockly.Msg.MUSIC_PLAY_NOTE_TOOLTIP);
        this.setHelpUrl("");
    }
};

Blockly.Blocks['MusicSetInstrument'] = {
    init: function() {
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_INSTRUMENT)
            .appendField(new Blockly.FieldDropdown([
                [Blockly.Msg.MUSIC_INSTRUMENT_GPIANO, "1"],
                [Blockly.Msg.MUSIC_INSTRUMENT_EPIANO, "5"],
                [Blockly.Msg.MUSIC_INSTRUMENT_MUSICBOX, "11"],
                [Blockly.Msg.MUSIC_INSTRUMENT_XYLOPHONE, "14"],
                [Blockly.Msg.MUSIC_INSTRUMENT_DRAWBARORGAN, "17"],
                [Blockly.Msg.MUSIC_INSTRUMENT_ACCORION, "22"],
                [Blockly.Msg.MUSIC_INSTRUMENT_GUITAR, "25"],
                [Blockly.Msg.MUSIC_INSTRUMENT_EGUITAR, "28"],
                [Blockly.Msg.MUSIC_INSTRUMENT_BASS, "33"],
                [Blockly.Msg.MUSIC_INSTRUMENT_VIOLIN, "41"],
                [Blockly.Msg.MUSIC_INSTRUMENT_VIOLA, "42"],
                [Blockly.Msg.MUSIC_INSTRUMENT_CELLO, "43"],
                [Blockly.Msg.MUSIC_INSTRUMENT_TRUMPET, "57"],
                [Blockly.Msg.MUSIC_INSTRUMENT_SAX, "67"],
                [Blockly.Msg.MUSIC_INSTRUMENT_PICCOLO, "73"],
                [Blockly.Msg.MUSIC_INSTRUMENT_FLUTE, "74"],
                [Blockly.Msg.MUSIC_INSTRUMENT_WHISTLE, "79"],
                [Blockly.Msg.MUSIC_INSTRUMENT_SITAR, "105"],
                [Blockly.Msg.MUSIC_INSTRUMENT_WOODBLOCK, "116"],
                [Blockly.Msg.MUSIC_INSTRUMENT_DRUM, "117"]
            ]), "INSTRUMENT");
        this.setPreviousStatement(true, null);
        this.setNextStatement(true, null);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip(Blockly.Msg.MUSIC_PLAY_NOTE_TOOLTIP);
        this.setHelpUrl("");
    }
};

Blockly.Blocks['MusicNote'] = {
    init: function() {
        this.appendDummyInput()
            .appendField("♪")
            .appendField(Blockly.Msg.MUSIC_NOTE)
            .appendField(new Blockly.FieldNumber(60, 0, 100), "NOTE");
        this.setOutput(true, Blockly.Types.NUMBER.output);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("http://cocorobo.cn/cocoblockly/dev/reference/notes.jpg");
    },
    getBlockType: function() {
        return Blockly.Types.NUMBER;
    }
};

Blockly.Blocks['MusicBeat'] = {
    init: function() {
        this.appendDummyInput()
            .appendField("♪")
            .appendField(new Blockly.FieldDropdown([
                ["1", "1000"],
                ["1/2", "500"],
                ["1/4", "250"],
                ["1/8", "125"],
                ["2", "2000"],
                ["4", "4000"],
            ]), "BEAT")
            .appendField(Blockly.Msg.MUSIC_BEAT);
        this.setOutput(true, "Number");
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    }
};

Blockly.Blocks['MusicPlayTone'] = {
    init: function() {
        this.appendValueInput("NOTE")
            .appendField("♩  " + Blockly.Msg.MUSIC_PLAY_NOTE);
        this.appendValueInput("DURATION")
            .appendField(Blockly.Msg.MUSIC_DURATION);
        this.setPreviousStatement(true, null);
        this.setNextStatement(true, null);
        this.setInputsInline(true);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip(Blockly.Msg.MUSIC_PLAY_NOTE_TOOLTIP);
        this.setHelpUrl("http://cocorobo.cn/cocoblockly/dev/reference/notes.jpg");
    }
};

Blockly.Blocks['MusicRest'] = {
    init: function() {
        this.appendValueInput("BEAT")
            .appendField("♩  " + Blockly.Msg.MUSIC_REST);
        this.setPreviousStatement(true, null);
        this.setNextStatement(true, null);
        this.setInputsInline(true);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    }
};

/*
 *MP3 player Setup
 */
Blockly.Blocks['Music_mp3_setup'] = {
    init: function() {
        this.appendDummyInput()
            .appendField(new Blockly.FieldImage("./../blockly/media/main-music.png", 50, 40, "15"));
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_MP3_SETUP);
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_MP3_SETUP_SETVOLUME)
            .appendField(new Blockly.FieldDropdown([
                [Blockly.Msg.MUSIC_MP3_SETUP_SETVOLUME_LOW, "90"],
                [Blockly.Msg.MUSIC_MP3_SETUP_SETVOLUME_MID, "50"],
                [Blockly.Msg.MUSIC_MP3_SETUP_SETVOLUME_HIGH, "10"]
            ]), "SETVOL")
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    }
};

/*
 *MP3 player 
 * play one music 
 */
Blockly.Blocks['Music_mp3_playOneWithName'] = {
    init: function() {
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_MP3_PLAYONE)
            .appendField(new Blockly.FieldTextInput("record.mp3"), "MUSIC_NAME")
            // .appendField(new Blockly.FieldDropdown([
            //     [Blockly.Msg.MUSIC_MP3_PLAYONE_NORMAL, "PM_NORMAL_PLAY"],
            //     [Blockly.Msg.MUSIC_MP3_PLAYONE_REPEAT, "PM_REPEAT_ONE"]
            // ]), "TYPE")
        this.setPreviousStatement(true, null);
        this.setNextStatement(true, null);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    }
};

/*
 *MP3 player 
 * play all Music
 */
Blockly.Blocks['Music_mp3_playAllMusic'] = {
    init: function() {
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_MP3_PLAYALL)
            // .appendField(new Blockly.FieldDropdown([
            //     [Blockly.Msg.MUSIC_MP3_PLAY_NORMAL, "PM_NORMAL_PLAY"],
            //     [Blockly.Msg.MUSIC_MP3_PLAY_REPEAT, "PM_REPEAT_LIST"]
            // ]), "TYPE")
        this.setPreviousStatement(true, null);
        this.setNextStatement(true, null);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    },
};

/** 
 *MP3 player 
 * Player Setting
 * {pause, resume, nextSong, preSong, volUp, volDown, playAll}
 */
Blockly.Blocks['Music_mp3_playSetting'] = {
    init: function() {
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_MP3_PLAYSETTING)
            .appendField(new Blockly.FieldDropdown([
                [Blockly.Msg.MUSIC_MP3_PLAYSETTING_RESUME, "0"],
                [Blockly.Msg.MUSIC_MP3_PLAYSETTING_PAUSE, "1"],
                [Blockly.Msg.MUSIC_MP3_PLAYSETTING_PRESONG, "2"],
                [Blockly.Msg.MUSIC_MP3_PLAYSETTING_NEXTSONG, "3"],
                [Blockly.Msg.MUSIC_MP3_PLAYSETTING_VOLUP, "4"],
                [Blockly.Msg.MUSIC_MP3_PLAYSETTING_VOLDOWN, "5"],
                [Blockly.Msg.MUSIC_MP3_PLAYSETTING_PLAYALL, "6"],
            ]), "SETTING")
        this.setPreviousStatement(true, null);
        this.setNextStatement(true, null);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    },
};

/**
 * MP3 player
 * get current volume
 */
Blockly.Blocks['Music_mp3_getCurrentVolume'] = {
       init: function() {
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_MP3_CURRENTVOLUME)
        this.setOutput(true, Blockly.Types.NUMBER.output);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    },
    getBlockType: function() {
        return Blockly.Types.NUMBER;
    }
}

 /**
  * MP3 player
  * set volume to
  */
  Blockly.Blocks['Music_mp3_setCurrentVolume'] = {
       init: function() {
        this.appendDummyInput()
            .appendField(Blockly.Msg.MUSIC_MP3_SETVOLUME)
            .appendField(new Blockly.FieldDropdown([
                ["0","0"],
                ["1","1"],
                ["2","2"],
                ["3","3"],
                ["4","4"],
                ["5","5"],
                ["6","6"],
                ["7","7"],
                ["8","8"],
                ["9","9"],
                ["10","10"]
                ]),"VOLLEVEL")
        this.setInputsInline(true);
        this.setPreviousStatement(true, null);
        this.setNextStatement(true, null);
        this.setColour(Blockly.Blocks.music.HUE);
        this.setTooltip("");
        this.setHelpUrl("");
    },
}