/**
 * @private
 */
Ext.define('Ext.device.contacts.Sencha', {
    extend: 'Ext.device.contacts.Abstract',

    getContacts: function(config) {
        var includeImages = this.getIncludeImages();
        if (typeof config.includeImages != "undefined") {
            includeImages = config.includeImages;
        }

        if (!config) {
            Ext.Logger.warn('Ext.device.Contacts#getContacts: You must specify a `config` object.');
            return false;
        }

        if (!config.success) {
            Ext.Logger.warn('Ext.device.Contacts#getContacts: You must specify a `success` method.');
            return false;
        }

        Ext.device.Communicator.send({
            command: 'Contacts#all',
            callbacks: {
                success: function(contacts) {
                    config.success.call(config.scope || this, contacts);
                },
                failure: function() {
                    if (config.failure) {
                        config.failure.call(config.scope || this);
                    }
                }
            },
            includeImages: includeImages,
            scope: this
        });
    },

    getThumbnail: function(config) {
        if (!config || typeof config.id == "undefined") {
            Ext.Logger.warn('Ext.device.Contacts#getThumbnail: You must specify an `id` of the contact.');
            return false;
        }

        if (!config || !config.callback) {
            Ext.Logger.warn('Ext.device.Contacts#getThumbnail: You must specify a `callback`.');
            return false;
        }

        Ext.device.Communicator.send({
            command: 'Contacts#getThumbnail',
            callbacks: {
                success: function(src) {
                    this.set('thumbnail', src);

                    if (config.callback) {
                        config.callback.call(config.scope || this, this);
                    }
                }
            },
            id: id,
            scope: this
        });
    },

    getLocalizedLabel: function(config) {
        if (!config || typeof config.label == "undefined") {
            Ext.Logger.warn('Ext.device.Contacts#getLocalizedLabel: You must specify an `label` to be localized.');
            return false;
        }

        if (!config || !config.callback) {
            Ext.Logger.warn('Ext.device.Contacts#getLocalizedLabel: You must specify a `callback`.');
            return false;
        }

        Ext.device.Communicator.send({
            command: 'Contacts#getLocalizedLabel',
            callbacks: {
                callback: function(label) {
                    config.callback.call(config.scope || this, label, config.label);
                }
            },
            label: config.label,
            scope: this
        });
    }
});