'use strict';

var gpower;

angular.module('roomstateapp.controllers', []).
    controller('StatusCtrl', function ($scope, $http, Socket) {

        // on page load request current data via simple API.
        $http({
            method: 'GET',
            url: '/api/simple/v2'
        }).
            success(function (data, status, headers, config) {
                $scope.simple = data;
                gpower.refresh(data.power);
            }).
            error(function (data, status, headers, config) {
                //$scope.name = 'Error!'
                console.log("error getting data");
            });

        // while page is loaded, new data will arrive via Websocket.
        Socket.on('sdata', function(message) {
            console.log("received data from server: " + JSON.stringify(message.data));
            $scope.simple = message.data;
            gpower.refresh(message.data.power);
        });
});

angular.module('roomstateapp.services', []).
    factory('Socket', function ($rootScope) {
        var socket = io.connect();

        return {
            on: function(eventName, callback) {
                socket.on(eventName, function() {
                    var args = arguments;
                    $rootScope.$apply(function() {
                        callback.apply(socket, args);
                    });
                });
            },
            emit: function(eventName, data, callback) {
                if(typeof data == 'function') {
                    callback = data;
                    data = {};
                }
                socket.emit(eventName, data, function() {
                    var args = arguments;
                    $rootScope.$apply(function() {
                        if(callback) {
                            callback.apply(socket, args);
                        }
                    });
                });
            },
            emitAndListen: function(eventName, data, callback) {
                this.emit(eventName, data, callback);
                this.on(eventName, callback);
            }
        };
    });

angular.module('roomstateapp.statusfilter', []).filter('statustostring', function() {
    return function(input) {
        return input === true ? 'geöffnet' : input === false ? 'geschlossen' : 'unbekannt';
    };
});

angular.module('roomstateapp', ['roomstateapp.controllers', 'roomstateapp.services', 'roomstateapp.statusfilter']);


$( document ).ready(function() {
    console.log( "ready!" );

gpower = new JustGage({
    id: "gauge",
    value: 0,
    min: 0,
    max: 30000,
    title: " ",
    label: "Watt",
    showMinMax: false
    });

});


