//
// Menue_Hue_Color
//
// Steuern einer Hue-Color artigen Lampe.
//

var T_Eingang;      // Telegram EIngang
var T_Benutzer;     // Telegram Benutzer
var T_Meldung;      // Telegram Meldung
var Lampenname;     // Name der Lampe
var Lampenpfad;     // Pfad zur Lampe
var bri;            // Helligkeit 0-254
var hue;            // Farbe 0-360
var sat;            // Sättigung 0-254
var trans;          // Übergangszeit 0-36000
var TriggerAktiv    // Hilfsvariable

// Pfad zum Namen finden.
Lampenpfad = getIdByName( Lampenname );

console.log( '##### Menu Hue Color: Lampenname '+Lampenname+'' );
console.log( '##### Menu Hue Color: Lampenpfad '+Lampenpfad+'' );

if ( Lampenpfad  == undefined ) {

    // Meldung im Log
    console.warn( '###  Menu Hue Color: Lampenname nicht gefunden '+Lampenname+'' );

    // Meldung via Telegram
    sendTo('telegram.0', {
        user: (Empfaenger),
        text: '*Fehler:* Name unbekannt\n'+Lampenname+'',
        parse_mode: 'markdown'
    });

} else {

        TriggerAktiv = true;

        // Einschalten damit man steuern kann.
        setState( Lampenpfad+'.on', true );

        // Startwerte
        var bri   = getState( Lampenpfad+'.bri' ).val;
        var hue   = getState( Lampenpfad+'.hue' ).val;
        var sat   = getState( Lampenpfad+'.sat' ).val;
        var trans = getState( Lampenpfad+'.transitiontime' ).val;

        // inline Keyboard
        sendTo('telegram.0', {
            user: (Empfaenger),
            parse_mode: 'markdown',
            text:  '*< '+Lampenname+' >*',
            reply_markup: {
                inline_keyboard: [
                        [
                            { text: ' H ['+Fstr( bri,3,1 )+']' , callback_data: '#H' },
                            { text: ' -50 ' , callback_data: '#H-50' },
                            { text: ' -10 ' , callback_data: '#H-10' },
                            { text: ' +10 ' , callback_data: '#H+10' },
                            { text: ' +50 ' , callback_data: '#H+50' }
                        ],
                        [
                            { text: ' F ['+Fstr( hue,3,1 )+']' , callback_data: '#F' },
                            { text: ' -50 ' , callback_data: '#F-50' },
                            { text: ' -10 ' , callback_data: '#F-10' },
                            { text: ' +10 ' , callback_data: '#F+10' },
                            { text: ' +50 ' , callback_data: '#F+50' }
                        ],
                        [
                            { text: ' S ['+Fstr( sat,3,1 )+']' , callback_data: '#S' },
                            { text: ' -50 ' , callback_data: '#S-50' },
                            { text: ' -10 ' , callback_data: '#S-10' },
                            { text: ' +10 ' , callback_data: '#S+10' },
                            { text: ' +50 ' , callback_data: '#S+50' }
                        ],
                        [
                            { text: ' T ['+Fstr( trans,5,1 )+']' , callback_data: '#T' },
                            { text: ' -50 ' , callback_data: '#T-50' },
                            { text: ' -10 ' , callback_data: '#T-10' },
                            { text: ' +10 ' , callback_data: '#T+10' },
                            { text: ' +50 ' , callback_data: '#T+50' }
                        ],
                        [
                            { text: ' Ein '    , callback_data: '#Ein' },
                            { text: ' Aus '    , callback_data: '#Aus' },
                            { text: ' fertig ' , callback_data: '#Fertig' }
                        ],
                ],
                    resize_keyboard:      true,
                    one_time_keyboard:    false,
                    disable_notification: true,
                    remove_Keyboard:      true // normale Tastatur
            } // replay markup
        },); // sendTo

        // Trigger auf Telegram Eingang
        on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
            var T_Eingang = getState('telegram.0.communicate.request').val;
            var T_Benutzer = T_Eingang.substring(1,T_Eingang.indexOf("]"));
            var T_Meldung = T_Eingang.substring(T_Eingang.indexOf("]")+1,T_Eingang.length);

            console.log( '### Menu Hue_Color: T_Eingang='+T_Eingang )
            console.log( '### Menu Hue_Color: T_Benutzer='+T_Benutzer )
            console.log( '### Menu Hue_Color: T_Meldung='+T_Meldung )

            if ( TriggerAktiv == true ) {
                
                // Die Eingabe des inline Keyboards MUSS abgeholt werden
                console.log( '### Menu Hue_Color: Abholen' )
                sendTo('telegram.0', {
                    user: (Empfaenger),
                    answerCallbackQuery: {
                        // Blendet kurz ein was gesendet wird
                        text: T_Meldung
                    } // answerCallbackQuery
                }); // sendTo

                // Eingabe verarbeiten
                console.log( '### Menu Hue_Color: Case' )
                switch ( T_Meldung ) {

                    case '#Ein':
                        setState( Lampenpfad+'.on', true );
                    break;
                    
                    case '#Aus':
                        setState( Lampenpfad+'.on', false );
                    break;
                    
                    case '#Fertig':
                        console.log( '### Menu Hue_Color: Fertig' )
                        TriggerAktiv = false;
                        // inline Keyboard löschen
                        sendTo('telegram.0', {
                            user: (Empfaenger),
                            deleteMessage: {
                                options: {
                                    chat_id: getState("telegram.0.communicate.requestChatId").val,
                                    message_id: getState("telegram.0.communicate.requestMessageId").val
                                }
                            }
                        });
                        return;
                    break;

                    case '#H':    bri = Math.floor(Math.random()*254); break;
                    case '#H+50': bri = bri + 50; break;
                    case '#H+10': bri = bri + 10; break;
                    case '#H-10': bri = bri - 10 ;break;
                    case '#H-50': bri = bri - 50 ;break;

                    case '#F':    hue = Math.floor(Math.random()*360); break;
                    case '#F+50': hue = hue + 50; break;
                    case '#F+10': hue = hue + 10; break;
                    case '#F-10': hue = hue - 10 ;break;
                    case '#F-50': hue = hue - 50 ;break;

                    case '#S':    sat = Math.floor(Math.random()*254); break;
                    case '#S+50': sat = sat + 50; break;
                    case '#S+10': sat = sat + 10; break;
                    case '#S-10': sat = sat - 10 ;break;
                    case '#S-50': sat = sat - 50 ;break;

                    case '#T':    trans = Math.floor(Math.random()*36000); break;
                    case '#T+50': trans = trans + 50; break;
                    case '#T+10': trans = trans + 10; break;
                    case '#T-10': trans = trans - 10 ;break;
                    case '#T-50': trans = trans - 50 ;break;

                    default:
                        // Unbekannte eingaben welche mit '#' beginnen werden gelogt.
                        // Alles andere wird verworfen.
                        if ( String( T_Meldung.slice(0, 1)) == '#' ) {
                            console.warn( '### Menu Hue_Color: unbekannter Parameter '+T_Meldung );
                        }
                    break;

                }; // switch

                // Werte begrenzen
                bri   = Math.min( Math.max( bri,   0),   254);
                hue   = Math.min( Math.max( hue,   0),   360);
                sat   = Math.min( Math.max( sat,   0),   254);
                trans = Math.min( Math.max( trans, 0), 36000);

                // Kurzzeitig auf Null damit man Änderungen direkt sieht
                setState( Lampenpfad+'.transitiontime', 0 ); trans = 0;

                // Veränderte Werte schreiben
                if ( bri != getState( Lampenpfad+'.bri' ).val ) {
                    setState( Lampenpfad+'.bri', bri );
/*
                    sendTo('telegram.0', {
                        user: (Empfaenger),
                        editMessageReplyMarkup: {
                            options: {
                                chat_id: getState("telegram.0.communicate.requestChatId").val,
                                message_id: getState("telegram.0.communicate.requestMessageId").val
                            },
                            InlineKeyboardButton: [
                                { text: ' H ['+Fstr( bri,3,1 )+']', callback_data: '#H' }
                            ]
                        }
                    });
*/
                };
                if ( hue != getState( Lampenpfad+'.hue' ).val ) {
                    setState( Lampenpfad+'.hue', hue );
                    sendTo('telegram.0', {
                        user: (Empfaenger),
//                        editMessageReplyMarkup: {
                        replyKeyboardMarkup: {
                            options: {
                                chat_id: getState("telegram.0.communicate.requestChatId").val,
                                message_id: getState("telegram.0.communicate.requestMessageId").val
                            },
                            InlineKeyboardButton: [
                                { text: ' F ['+Fstr( hue,3,1 )+']', callback_data: '#F' }
                            ]
                        }
                    });
                };
                if ( sat != getState( Lampenpfad+'.sat' ).val ) {
                    setState( Lampenpfad+'.sat', sat );
/*
                    sendTo('telegram.0', {
                        user: (Empfaenger),
                        editMessageReplyMarkup: {
                            options: {
                                chat_id: getState("telegram.0.communicate.requestChatId").val,
                                message_id: getState("telegram.0.communicate.requestMessageId").val
                            },
                            InlineKeyboardButton: [
                                { text: ' S ['+Fstr( sat,3,1 )+']', callback_data: '#S' }
                            ]
                        }
                    });
*/
                };
                if ( trans != getState( Lampenpfad+'.transitiontime' ).val ) {
                    setState( Lampenpfad+'.transitiontime', trans );
/*
                    sendTo('telegram.0', {
                        user: (Empfaenger),
                        editMessageReplyMarkup: {
                            options: {
                                chat_id: getState("telegram.0.communicate.requestChatId").val,
                                message_id: getState("telegram.0.communicate.requestMessageId").val
                            },
                            InlineKeyboardButton: [
                                { text: ' T ['+Fstr( trans,3,1 )+']', callback_data: '#T' }
                            ]
                        }
                    });
*/
                };

            }; // if Trigger Aktiv

        }); // on

} // if Lampenpfad
