# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import api, models, _
from odoo.exceptions import UserError
from odoo.addons.server_environment import serv_config


SECTION = 'ir.config_parameter'


class IrConfigParameter(models.Model):

    _inherit = 'ir.config_parameter'

    @api.model
    def get_param(self, key, default=False):
        value = super(IrConfigParameter, self).get_param(key, default=None)
        if serv_config.has_option(SECTION, key):
            cvalue = serv_config.get(SECTION, key)
            if not cvalue:
                raise UserError(_("Key %s is empty in "
                                  "server_environment_file") %
                                (key, ))
            if cvalue != value:
                # we write in db on first access;
                # should we have preloaded values in database at,
                # server startup, modules loading their parameters
                # from data files would break on unique key error.
                self.sudo().set_param(key, cvalue)
                value = cvalue
        if value is None:
            return default
        return value

    @api.model
    def create(self, vals):
        key = vals.get('key')
        if serv_config.has_option(SECTION, key):
            # enforce value from config file
            vals = dict(vals, value=serv_config.get(SECTION, key))
        return super(IrConfigParameter, self).create(vals)

    @api.multi
    def write(self, vals):
        for rec in self:
            key = vals.get('key') or rec.key
            if serv_config.has_option(SECTION, key):
                # enforce value from config file
                newvals = dict(vals, value=serv_config.get(SECTION, key))
            else:
                newvals = vals
            super(IrConfigParameter, rec).write(newvals)
        return True