# -*- coding: utf-8 -*-
import logging
from odoo import fields, models
import requests
from odoo.addons.sf_base.commons.common import Common
from urllib.parse import urlencode
_logger = logging.getLogger(__name__)


# 材料
class MrsProductionMaterials(models.Model):
    _name = 'sf.production.materials'
    _description = '材料'

    materials_no = fields.Char("编码")
    name = fields.Char('名称')
    partner_ids = fields.Many2many('res.partner', 'materials_ids', '加工工厂')
    materials_model_ids = fields.One2many('sf.materials.model', 'materials_id', '材料型号')
    remark = fields.Text("备注")
    active = fields.Boolean('有效', default=True)

    # def open_url_action(self):
    #     base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
    #     # url = 'http://192.168.50.202:8080/api'
    #     url = 'https://bfw.jikimo.com/'
    #     # data = {
    #     #     'key' : 'value'
    #     # }
    #
    #     response = requests.get(url)
    #     response.raise_for_status()
    #     return {
    #         'type': 'ir.actions.act_url',
    #         'url': response.url,
    #         'target': 'new'
    #     }



    def open_url_action(self):
        # sf_sync_config = self.env['res.config.settings'].get_values()
        # token = sf_sync_config['token']
        # sf_secret_key = sf_sync_config['sf_secret_key']
        # headers = Common.get_headers(self, token, sf_secret_key)
        url = 'http://192.168.50.127:8081'
        params = {
            'user_id': self._uid
        }
        url_params = urlencode(params)
        return {
            'type': 'ir.actions.act_url',
            'url': url + '?' + url_params,
            # 'url': url,
            'target': 'new'
        }


# 材料型号
class MrsMaterialModel(models.Model):
    _name = 'sf.materials.model'
    _description = '材料型号'

    materials_no = fields.Char("编码")
    materials_num = fields.Char("编码号")
    name = fields.Char('型号名')
    need_h = fields.Boolean("热处理", default="false")
    mf_materia_post = fields.Char("热处理后密度")
    density = fields.Float("密度(kg/m³)")
    materials_id = fields.Many2one('sf.production.materials', "材料名")
    remark = fields.Text("备注")
    gain_way = fields.Selection(
        [("自加工", "自加工"), ("外协", "外协"), ("采购", "采购")],
        default="", string="获取方式")
    supplier_ids = fields.One2many('sf.supplier.sort', 'materials_model_id', string='供应商')
    active = fields.Boolean('有效', default=True)


class MrsProductionProcessCategory(models.Model):
    _name = 'sf.production.process.category'
    _description = '表面工艺类别'
    order = 'id desc'

    name = fields.Char('名称')
    code = fields.Char("编码")
    sequence = fields.Integer('排序')
    production_process_ids = fields.One2many('sf.production.process', 'category_id', string="表面工艺")
    active = fields.Boolean('有效', default=True)


# 工艺 编码，名称，备注
class MrsProductionProcess(models.Model):
    _name = 'sf.production.process'
    _description = '表面工艺'

    process_encode = fields.Char("编码")
    name = fields.Char('名称')
    remark = fields.Text("备注")
    processing_order_ids = fields.One2many('sf.processing.order', 'production_process_id', string='工序')
    partner_process_ids = fields.Many2many('res.partner', 'process_ids', '加工工厂')
    active = fields.Boolean('有效', default=True)
    parameter_ids = fields.One2many('sf.production.process.parameter', 'process_id', string='可选参数')
    category_id = fields.Many2one('sf.production.process.category')
    # workcenter_ids = fields.Many2many('mrp.workcenter', 'rel_workcenter_process', required=True)


class MrsProcessingTechnology(models.Model):
    _name = 'sf.processing.technology'
    _description = '加工工艺'

    name = fields.Char('名称', index=True)
    remark = fields.Text('备注', index=True)
    process_encode = fields.Char("编码")
    processing_order_ids = fields.Many2many('sf.processing.order', 'sf_associated_processes',
                                            index=True, string='工序')
    active = fields.Boolean('有效', default=True)


class MrsProcessingOrder(models.Model):
    _name = 'sf.processing.order'
    _description = '工序'
    sequence = fields.Integer('Sequence')
    processing_technology_ids = fields.Many2many('sf.processing.technology', 'sf_associated_processes',
                                                 index=True, string='加工工艺')
    production_process_id = fields.Many2one('sf.production.process', string="表面工艺")


class Tray(models.Model):
    _name = 'sf.tray'
    _description = '托盘'

    code = fields.Char('编码', copy=False)
    name = fields.Char('名称')
    state = fields.Selection(
        [("空闲", "空闲"), ("占用", "占用"), ("报损", "报损")],
        default="空闲", string="状态")
    active = fields.Boolean('有效', default=True)


class SupplierSort(models.Model):
    _name = 'sf.supplier.sort'
    _description = '供应商排序'

    sequence = fields.Integer('Sequence')
    partner_id = fields.Many2one('res.partner', domain="[('is_company', '=', True),('supplier_rank', '!=', 0)]")
    materials_model_id = fields.Many2one('sf.materials.model')

    _sql_constraints = [
        ('supplier_sort_uniq', 'unique (partner_id,materials_model_id)', '排序不能重复!')
    ]


class MrsProductionProcessParameter(models.Model):
    _name = 'sf.production.process.parameter'
    _description = '可选参数'
    # _display_name = 'name'

    code = fields.Char("编码")
    name = fields.Char('名称')
    gain_way = fields.Selection([("自加工", "自加工"), ("外协", "外协")], default="", string="获取方式")
    is_check = fields.Boolean(default=False)
    # price = fields.Float('单价')
    process_id = fields.Many2one('sf.production.process', string='表面工艺')
    materials_model_ids = fields.Many2many('sf.materials.model', 'applicable_material', string='适用材料')
    active = fields.Boolean('有效', default=True)

    def name_get(self):
        result = []
        for parameter in self:
            if parameter.process_id:
                name = parameter.process_id.name + '-' + parameter.name
                result.append((parameter.id, name))
        return result

    # 获取表面工艺的获取方式
    def get_gain_way(self, item):
        process_parameter = self.env['sf.production.process.parameter'].search([('id', '=', item.id)])
        return process_parameter
