angular.module('odoo')

.factory('opportunitiesStorageFactory', function () {

    var save = function (opportunity, success, error) {
        var values = [
                        opportunity.remote_id ? opportunity.remote_id : 0,
                        1, opportunity.name ? opportunity.name : '',
                        opportunity.description ? opportunity.description : '',
                        opportunity.contact_name ? opportunity.contact_name : '',
                        opportunity.phone ? opportunity.phone : '',
                        opportunity.mobile ? opportunity.mobile : '',
                        opportunity.fax ? opportunity.fax : '',
                        opportunity.street ? opportunity.street : '',
                        opportunity.street2 ? opportunity.street2 : '',
                        opportunity.meeting_count ? opportunity.meeting_count : 0,
                        opportunity.message_bounce ? opportunity.message_bounce : 0,
                        opportunity.planned_cost ? opportunity.planned_cost : 0,
                        opportunity.planned_revenue ? opportunity.planned_revenue : 0,
                        opportunity.priority ? opportunity.priority : 2,
                        opportunity.probability ? opportunity.probability : 0,
                        (opportunity.type == undefined || opportunity.type == 'lead') ?  'opportunity' : opportunity.type,
                        opportunity.partner_id ? opportunity.partner_id : 0
                    ];

        var sql = null;

        if (opportunity.id) {
            values.push(opportunity.id);

            sql = 'UPDATE lead SET ' +
                  'remote_id = ?,' +
                  'modified = ?,' +
                  'modifiedDate = CURRENT_TIMESTAMP,' +
                  'name = ?,' +
                  'description = ?,' +
                  'contact_name = ?,' +
                  'phone = ?,' +
                  'mobile = ?,' +
                  'fax = ?,' +
                  'street = ?,' +
                  'street2 = ?,' +
                  'meeting_count = ?,' +
                  'message_bounce = ?,' +
                  'planned_cost = ?,' +
                  'planned_revenue = ?,' +
                  'priority = ?,' +
                  'probability = ?,' +
                  'type = ?,' +
                  'partner_id = ? ' +
                  'WHERE id = ?';
        } else {
            sql = 'INSERT INTO lead(' +
                  'remote_id,' +
                  'modified,' +
                  'name,' +
                  'description,' +
                  'contact_name,' +
                  'phone,' +
                  'mobile,' +
                  'fax,' +
                  'street,' +
                  'street2,' +
                  'meeting_count,' +
                  'message_bounce,' +
                  'planned_cost,' +
                  'planned_revenue,' +
                  'priority,' +
                  'probability,' +
                  'type,' +
                  'partner_id) ' +
                  'VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
        }

        db.executeSql(sql, values, function (result) {
            success(sql.startsWith('INSERT') ? result.insertId : opportunity.id);
        }, function (err) {
            error(err);
        });
    }

    // Remove opportunity from local storage
    var remove = function (opportunity, success, error) {
        var values = [opportunity.id];
        var sql = null;

        if (opportunity.remote_id) {
            sql = 'UPDATE lead SET modified = 2 WHERE id = ?';
        } else {
            sql = 'DELETE FROM lead WHERE id = ?'
        }

        db.executeSql(sql, values, function (result) {
            success(result.rowsAffected);
        }, function(err) {
            error(err);
        });
    }

    var removeAll = function (success, error) {
        var sql = "DELETE FROM lead WHERE type = 'opportunity'";

        db.executeSql(sql, [], function(result) {
            success(result.rowsAffected);
        }, function(err) {
            error(err);
        });
    }

    return {
        save: save,
        remove: remove,
        removeAll: removeAll
    }
});
