odoo.define('mail.model.MailFailure', function (require) {
"use strict";

var Class = require('web.Class');
var core = require('web.core');
var Mixins = require('web.mixins');
var ServicesMixin = require('web.ServicesMixin');
var time = require('web.time');

var _t = core._t;

var MailFailure = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, {
    /**
     * @param {mail.Manager} parent
     * @param {Object} data
     * @param {string} data.failure_type
     * @param {string} data.last_message_date
     * @param {integer} data.message_id
     * @param {string} data.model
     * @param {string} data.model_name
     * @param {string} data.module_icon
     * @param {Array} data.notifications
     * @param {string} data.record_name
     * @param {integer} data.res_id
     * @param {string} data.uuid
     */
    init: function (parent, data) {
        Mixins.EventDispatcherMixin.init.call(this, arguments);
        this.setParent(parent);

        this._documentID = data.res_id;
        this._documentModel = data.model;
        this._failureType = data.failure_type || 'mail';
        this._lastMessageDate = moment(); // by default: current datetime
        this._messageID = data.message_id;
        this._modelName = data.model_name;
        this._moduleIcon = data.module_icon;
        this._notifications = data.notifications;
        this._recordName = data.record_name;
        this._uuid = data.uuid;

        if (data.last_message_date) {
            this._lastMessageDate = moment(time.str_to_datetime(data.last_message_date));
        }
    },

    //--------------------------------------------------------------------------
    // Public
    //--------------------------------------------------------------------------

    /**
     * Get the document model that this mail failure is linked to.
     *
     * @returns {string}
     */
    getDocumentModel: function () {
        return this._documentModel;
    },
    /**
     * Get the document ID that this mail failure is linked to.
     *
     * @returns {integer}
     */
    getDocumentID: function () {
        return this._documentID;
    },
    /**
     * Get the type of failure of this mail failure.
     *
     * @returns {string}
     */
    getFailureType: function () {
        return this._failureType;
    },
    /**
     * Get the ID of the message that this mail failure is related to.
     *
     * @returns {integer}
     */
    getMessageID: function () {
        return this._messageID;
    },
    /**
     * Get a valid object for the 'mail.preview' template
     *
     * @returns {Object}
     */
    getPreview: function () {
        var preview = {
            body: _t("An error occured when sending an email"),
            date: this._lastMessageDate,
            documentID: this._documentID,
            documentModel: this._documentModel,
            id: 'mail_failure',
            imageSRC: this._moduleIcon,
            title: this._modelName,
        };
        return preview;
    },
    /**
     * Tell whether the mail failure comes from a message in a document.
     *
     * @returns {boolean}
     */
    isLinkedToDocument: function () {
        return !!(this._documentModel && this._documentID);
    },
});

return MailFailure;

});
