# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

import mimetypes
import dateutil.parser
import pytz

from odoo import api, fields, models
from odoo.tools.mimetypes import guess_mimetype


class AddFileWizard(models.TransientModel):
    """ Wizard d'ajout de fichier dans la GED

    Récupère automatiquement depuis Alfresco les valeurs de periode,
    type et validité ainsi que l'organisme associé
    """
    _name = 'add.file.wizard'
    _inherit = 'cgscop.alfresco'
    _description = "Ajout de fichier dans Alfresco"

    # Default functions
    def _get_selection(self, value):
        file_type = self.alfresco_list_type()[value]
        select_type = []
        for type in file_type:
            select_type.append(
                (type, type))
        return select_type

    @api.model
    def _get_type(self):
        return self._get_selection('type')

    @api.model
    def _get_periode(self):
        return self._get_selection('periode')

    @api.model
    def _get_validite(self):
        return self._get_selection('validite')

    @api.model
    def _default_partner_id(self):
        return self.env.context.get('active_id')

    type = fields.Selection(selection=_get_type, string='Type')
    periode = fields.Selection(selection=_get_periode, string='Période')
    validite = fields.Selection(selection=_get_validite, string='Validité')
    file = fields.Binary('Fichier')
    filename = fields.Char('Nom')
    partner_id = fields.Many2one(
        comodel_name='res.partner',
        string='Organisme',
        default=_default_partner_id,)

    @api.multi
    def add_file(self):
        """ Ajoute un fichier sur la GED Alfresco

        @return: fonction get_partner_files() de res.partner
        """
        # Get Mimetype
        content_type = mimetypes.guess_type(self.filename)
        if content_type[0]:
            content_type = content_type[0]
        else:
            content_type = guess_mimetype(self.file)
        # Upload File
        uploaded_file = self.alfresco_upload(
            partner=self.partner_id,
            type=self.type,
            periode=self.periode,
            validite=self.validite,
            filename=self.filename,
            mimetype=content_type,
            doc=self.file.decode('utf-8'))
        # Add new file in transient model for view
        uid = self.env.user.id
        alfresco_obj = self.env["alfresco.partner.files"]
        alfresco_obj.create({
            'name': self.periode if self.periode != 'Autre' else self.filename,
            'type': self.type,
            'file_id': uploaded_file,
            'user_id': uid,
            'periode': self.periode,
            'validite': self.validite,
            'last_modification': fields.Datetime.now(),
            'partner_id': self.partner_id.id,
        })
        # Reload view
        return {
            "type": "ir.actions.act_window",
            "name": "Fichiers liés",
            "res_model": "alfresco.partner.files",
            "views": [[False, "tree"]],
            "search_view_id": self.env.ref(
                "cgscop_alfresco.alfresco_partner_files_search").id,
            'context': {'search_default_group_periode': True}
        }