
mainApp.factory('Image', ['$http', 'Identity', function ($http, Identity) {

        // Data object
        var data = {};
        data.images = null; // Images
        data.axioms = {};
        data.axioms.protected = [true, false];
        data.axioms.visibility = ["public", "private"];
        /**
         *  Parse uploadImage anwser
         * @param {type} response
         * @param {type} failedToSendRequest
         * @returns {Image_L2.parseUploadImageAnswer.requestParserResult}
         */
        var parseUploadImageAnswer = function (response, failedToSendRequest) {

            // Defined return object
            var requestParserResult = {};
            requestParserResult.status = 1;
            requestParserResult.failReason = null;


            if (typeof response.data.Images !== 'undefined') {
                // Set status code
                requestParserResult.status = 0;
                data.images = response.data.Images;

            } else if (failedToSendRequest) {
                requestParserResult.failReason = "Failed to send request";
            } else {
                requestParserResult.failReason = "Error";
            }
            return requestParserResult;
        };


        /**
         *  Get images
         * @param {type} callback
         * @returns {undefined}
         */
        var getImages = function (callback) {

            var result = $http.post('../server/index.php',
                    $.param({"token": Identity.getToken(), "task": "image", 'action': 'listImage'}));

            // Wait and handle the response
            result.then(function (response) {
                callback(parseUploadImageAnswer(response, false));
            }, function (response) {
                callback(parseUploadImageAnswer(response, true));
            });


        };

        /**
         * Update image
         * @param {type} image
         * @param {type} callback
         * @returns {undefined}
         */
        var updateImage = function (image, callback) {
            var result = $http.post('../server/index.php',
                    $.param({"token": Identity.getToken(), "task": "image", 'action': 'updateImage', 'id': image.id, 'opt': image}));

            // Wait and handle the response
            result.then(function (response) {
                callback();
            }, function (response) {
                alert(response)
            });


        };



        /**
         * Upload an image
         * @param {type} fileToUpload
         * @param {type} callback
         * @returns {undefined}
         */
        var uploadImage = function (fileToUpload, callback) {
            var form_data = new FormData();
            form_data.append('file', fileToUpload);
            console.log(fileToUpload);
            form_data.append("task", "image");
            form_data.append("token", Identity.getToken());
            form_data.append('action', "uploadImage");
            form_data.append('id', '6564');
            form_data.append('file_name', fileToUpload);

            $.ajax({
                url: "../server/index.php", // Url to which the request is send
                type: "POST", // Type of request to be send, called as method
                data: form_data, // Data sent to server, a set of key/value pairs (i.e. form fields and values)
                file_name: fileToUpload,
                token: Identity.getToken(),
                task: "image",
                action: 'uploadImage',
                id: '6564',
                contentType: false, // The content type used when sending data to the server.
                cache: false, // To unable request pages to be cached
                processData: false, // To send DOMDocument or non processed data file it is set to false
                success: function (data)   // A function to be called if request succeeds
                {
                    alert("success");
                }
            });

            //var result=$http.post('../server/index.php',
            //				  $.param({"token" : Identity.getToken(), "task" : "image", 'action':'uploadImage', 'file_name':form_data, 'id':'6564'}));  

            // Wait and handle the response
            /*   result.then(function (response){
             callback(parseUploadImageAnswer(response, false));
             },function(response){
             callback(parseUploadImageAnswer(response, true));
             });*/
        };


        var getData = function (response) {
            return data;
        };

        // Return services objects
        return {
            getImages: getImages,
            updateImage: updateImage,
            getData: getData,
            uploadImage: uploadImage
        };


    }]);
