# -*- coding: utf-8 -*-
import json

from odoo import api, fields, models
from odoo.addons.sf_wxwork_approval.models import wx_work_api


class WxSettings(models.Model):
    _name = 'wxwork.settings'
    _description = '企业微信设置'

    wx_work_app = fields.Char(string='企业微信应用名称')
    wx_work_corp_id = fields.Char(string='企业微信CorpID')
    wx_work_secret = fields.Char(string='企业微信Secret')
    wx_work_template_ids = fields.Many2many('wxwork.template.settings', string='审批模板')

    def update_template(self):
        template_dict = {}
        template_list = []
        print(self.wx_work_template_ids)
        for template in self.wx_work_template_ids:
            # template_dict[template.sp_name] = template.template_id
            template_list.append(template.template_id)
            # template_dict = {}
        # print(template_list)
        wx = wx_work_api.WxWorkAPI(self.wx_work_corp_id, self.wx_work_secret)
        # print(wx)
        # 获取模型中的所有记录
        all_records = self.env['wxwork.approval.template'].search([])
        all_records1 = self.env['wxwork.approval.template.controls'].search([])

        # 删除所有记录
        all_records.unlink()
        all_records1.unlink()
        content_data_list = []
        template_data = {}
        controls_data = []
        for template in template_list:
            print('====================')
            temp_dict = {'template_id': template}
            # print(json.dumps(temp_dict))
            # aa = json.dumps(temp_dict)
            template_detail = wx.get_template_detail(temp_dict)
            print('template_detail%s' % template_detail)
            #
            # # 准备用于创建记录的字段值
            # values = {
            #     'process_code': template,
            #     'name': template_detail['template_names'][0]['text'],
            #     # 如果需要设置content_ids，请按照正确格式添加关联数据
            # }
            # # 使用create方法创建记录
            # new_record = self.env['wxwork.approval.template'].create(values)

            # 解析template_detail中的内容数据

            # print('jjjjjjjj', template_detail['template_content'])
            # print('jjjjjjjjjj', template_detail['template_content']['controls'])
            for control_data in template_detail['template_content']['controls']:
                # print('control_data', control_data)
                property_data = control_data['property']
                # print('property_data', property_data)
                config_values = {}

                if 'config' in control_data:
                    config_data = control_data['config']
                    print('config_data', config_data)

                    # 先提取table_children数据
                    table_children_data = config_data.get('table', {}).get('children', [])

                    # 创建一个空列表用于存储table_children记录
                    table_children_records = []

                    # 遍历table_children_data并为每个子控件创建记录
                    for child_data in table_children_data:
                        print('child_data====================', child_data)
                        # 提取property相关数据
                        child_property_data = {
                            # 'control_type': child_data.get('property', {}).get('control', None),
                            # 'unique_control_id': child_data.get('property', {}).get('id', None),
                            # 'title': child_data.get('property', {}).get('title', [{}])[0].get('text', None),
                            # 'placeholder': child_data.get('property', {}).get('placeholder', [{}])[0].get('text', None),
                            # 'require': child_data.get('property', {}).get('require', None),
                            # 'un_print': child_data.get('property', {}).get('un_print', None),
                            # 'un_replace': child_data.get('property', {}).get('un_replace', None),
                            # 'display': child_data.get('property', {}).get('display', None),
                            'control_type': child_data.get('property', {}).get('control', None),
                            'unique_control_id': child_data.get('property', {}).get('id', None),
                            'title': child_data.get('property', {}).get('title', [{}])[0].get('text', None),
                            'placeholder': child_data.get('property', {}).get('placeholder', [{}])[0].get('text', None),
                            'require': child_data.get('property', {}).get('require', None),
                            'un_print': child_data.get('property', {}).get('un_print', None),
                            'un_replace': child_data.get('property', {}).get('un_replace', None),
                            'display': child_data.get('property', {}).get('display', None),
                        }

                        # 在这里根据控件类型为每个子控件创建相应的config_id数据
                        # 例如：
                        config_id_data = {
                            'date_type': [(0, 0, {'date_type': child_data.get('config', {}).get('date', {}).get('type',
                                                                                                                None)})] if 'date' in child_data.get(
                                'config', {}) else [],
                            'selector_type': [(0, 0, {
                                'selector_type': 'single',
                                'options': [(0, 0, {'key': 'opt1', 'text': '选项1'})],
                            })] if 'selector' in child_data.get('config', {}) else [],
                            'contact_type': [
                                (0, 0, {'contact_type': config_data.get('contact', {}).get('type', None),
                                        'contact_mode': config_data.get('contact', {}).get('mode',
                                                                                           None)})] if 'contact' in child_data.get(
                                'config', {}).get('contact', {}) else [],
                            'file_type': [
                                (0, 0, {'is_only_photo': config_data.get('file', {}).get('is_only_photo',
                                                                                         None)})] if 'file' in child_data.get(
                                'config', {}).get('file', {}) else [],
                            # 'table_type': [(0, 0, {
                            #     'table_children': [
                            #         (0, 0, {'control_type': config_data.get('table', {}).get('children', None)[0].get('property', {}).get('control', None),
                            #                 'unique_control_id': config_data.get('table', {}).get('children', None)[0].get('property', {}).get('id', None),
                            #                 'title': config_data.get('table', {}).get('children', None)[0].get('property', {}).get('title', None)[0].get('text', None),
                            #                 'placeholder': config_data.get('table', {}).get('children', None)[0].get('property', {}).get('placeholder', None)[0].get('text', None),
                            #                 'require': config_data.get('table', {}).get('children', None)[0].get('property', {}).get('require', None),
                            #                 'un_print': config_data.get('table', {}).get('children', None)[0].get('property', {}).get('un_print', None),
                            #                 'un_replace': config_data.get('table', {}).get('children', None)[0].get('property', {}).get('un_replace', None),
                            #                 'display': config_data.get('table', {}).get('children', None)[0].get('property', {}).get('display', None),
                            #                 })],
                            # })] if 'table' in config_data else [],
                            # 'attendance_type': [(0, 0, {'attendance_type': '1',
                            #                             'attendance_date_range_type': 'hour'})] if 'attendance' in config_data else [],
                        }

                        # 将config_id_data添加到property_data中（如果有的话）
                        if config_id_data:
                            child_property_data['child_control_id'] = config_id_data

                        # 将property_data添加到table_children_records中
                        table_children_records.append((0, 0, child_property_data))

                    # 创建一个包含多个wxwork.approval.template.controls的字典列表
                    controls_data = [
                        (0, 0, {
                            'property_id': [(0, 0, {
                                'control_type': property_data.get('control', ''),
                                'unique_control_id': property_data.get('id', ''),
                                'title': property_data['title'][0]['text'] if 'title' in property_data else '',
                                'placeholder': property_data['placeholder'][0][
                                    'text'] if 'placeholder' in property_data else '',
                                'require': property_data.get('require', None),
                                'un_print': property_data.get('un_print', None),
                                'un_replace': property_data.get('un_replace', None),
                                'display': property_data.get('display', None),
                            })],
                            'config_id': [(0, 0, {
                                'date_type': [(0, 0, {'date_type': config_data.get('date', {}).get('type',
                                                                                                   None)})] if 'date' in config_data else [],
                                # 'selector_type': [(0, 0, {
                                #     'selector_type': config_data['table']['children'][0].get('config', {}).get(
                                #         'selector', {}).get('type', None),
                                #     'options': [
                                #         (0, 0, {'key': option['key'], 'text': option['value'][0]['text']})
                                #         for option in config_data['table']['children'][0].get('config', {}).get('selector', {}).get('options', [])
                                #     ],
                                # })] if 'selector' in config_data else [],
                                'selector_type': [
                                    (0, 0, {
                                        'selector_type': child.get('config', {}).get('selector', {}).get('type', None),
                                        'options': [
                                            (0, 0, {'key': option['key'], 'text': option['value'][0]['text']})
                                            for option in child.get('config', {}).get('selector', {}).get('options', [])
                                        ],
                                    })
                                    for child in config_data.get('table', {}).get('children', [])
                                    if 'selector' in child.get('config', {})
                                ],

                                'contact_type': [
                                    (0, 0, {'contact_type': config_data.get('contact', {}).get('type', None),
                                            'contact_mode': config_data.get('contact', {}).get('mode',
                                                                                               None)})] if 'contact' in config_data else [],
                                'file_type': [
                                    (0, 0, {'is_only_photo': config_data.get('file', {}).get('is_only_photo',
                                                                                             None)})] if 'file' in config_data else [],
                                'table_type': [(0, 0, {
                                    'table_children': table_children_records,
                                })] if 'table' in config_data else [],

                                # 'contact_type': [
                                #     (0, 0, {'contact_type': config_data.get('contact', {}).get('type', None)})],
                                # 'contact_mode': [
                                #     (0, 0, {'contact_mode': config_data.get('contact', {}).get('mode', None)})],
                                # 'table_type': [(0, 0, {
                                #     'table_children': [
                                #         (0, 0,
                                #          {'control_type': 'Text', 'unique_control_id': 'text_2', 'title': '文本框2'})],
                                # })],
                                # # [
                                # #     (0, 0, {'control_type': config_data.get('table', {}).get('children', {})[0].
                                # #      get('property', {}).get('control', None), 'unique_control_id': 'text_2',
                                # #             'title': '文本框2'})]

                                'attendance_type': [(0, 0, {'attendance_type': '1',
                                                            'attendance_date_range_type': 'hour'})] if 'attendance' in config_data else [],
                            })],
                        }),
                        # 在这里添加更多的控件数据
                    ]
                else:
                    # 创建一个包含多个wxwork.approval.template.controls的字典列表
                    controls_data = [
                        (0, 0, {
                            'property_id': [(0, 0, {
                                'control_type': property_data.get('control', ''),
                                'unique_control_id': property_data.get('id', ''),
                                'title': property_data['title'][0]['text'] if 'title' in property_data else '',
                                'placeholder': property_data['placeholder'][0][
                                    'text'] if 'placeholder' in property_data else '',
                                'require': property_data.get('require', None),
                                'un_print': property_data.get('un_print', None),
                                'un_replace': property_data.get('un_replace', None),
                                'display': property_data.get('display', None),
                            })],
                        }),
                        # 在这里添加更多的控件数据
                    ]

                # 从vacation_list中提取假期类型数据
                vacation_items = []
                vacation_items_data = template_detail.get('vacation_list', [])
                # 将假期类型数据转换为适用于vacation_items字段的格式
                if vacation_items_data and 'item' in vacation_items_data:
                    items = []
                    for item in vacation_items_data['item']:
                        id = item.get('id')
                        name = item.get('name')[0].get('text')
                        items.append({'id': id, 'name': name})
                    print(items)

                    # if vacation_items_data:
                    #     print('vacation_items_data', vacation_items_data)
                    #     print('vacation_items_data', type(vacation_items_data))
                    #     print('vacation_items_data', vacation_items_data['items'])
                    # print('vacation_items_data', vacation_items_data[0])
                    vacation_items = [(0, 0, {
                        'vacation_id': item['id'],
                        'name': item['name'],
                        'lang': 'zh_CN',
                    }) for item in items]

                # 创建一个包含WxWorkApprovalTemplate和关联记录数据的字典
                template_data = {
                    'process_code': template,
                    'name': template_detail['template_names'][0]['text'],
                    'content_ids': controls_data,
                    # 'vacation_config_id': [(0, 0, {
                    #     # 在这里添加wxwork.approval.vacation.config模型的字段数据
                    #     'vacation_id': template_detail.get('vacation_id', None),
                    #     'name': template_detail.get('vacation_name', None),
                    #     'lang': template_detail.get('vacation_lang', None),
                    #     # ...
                    # })],
                    'vacation_config_id': vacation_items
                }
                # 检查数据库中是否已经存在具有相同process_code的模板
                existing_template = self.env['wxwork.approval.template'].search(
                    [('process_code', '=', template)], limit=1)

                if existing_template:
                    # 如果模板已经存在，更新其content_ids字段（即添加控件记录）
                    existing_template.write({'content_ids': controls_data})
                else:
                    # 如果模板不存在，创建一个新的模板及其关联记录
                    # 调用create方法创建记录
                    template_record = self.env['wxwork.approval.template'].create(template_data)

                # # print(property_data)
                # # 准备用于创建记录的字段值
                # property_values = {
                #     'control_type': property_data.get('control', ''),
                #     'unique_control_id': property_data.get('id', ''),
                #     'title': property_data['title'][0]['text'] if 'title' in property_data else '',
                #     'placeholder': property_data['placeholder'][0]['text'] if 'placeholder' in property_data else '',
                #     'require': property_data.get('require', None),
                #     'un_print': property_data.get('un_print', None),
                #     'un_replace': property_data.get('un_replace', None),
                #     'display': property_data.get('display', None),
                #     # 'un_replace': template_detail['template_names'][0]['text'],
                #     # 如果需要设置content_ids，请按照正确格式添加关联数据
                # }
                # # print('property_values', property_values)
                # # config_data = None
                #
                # if 'config' in control_data:
                #
                #     config_data = control_data['config']
                #     # print('config_data===', config_data)
                #     if '"date":' in config_data:
                #         # config_values = {
                #         #     'date_type': config_data.get('type', ''),
                #         # }
                #         config_values['date_type'] = config_data.get('type', '')
                #     if '"selector":' in config_data:
                #         # config_values = {
                #         #     'selector_type': config_data.get('type', ''),
                #         #     # 'options': config_data['title'][0]['text'] if 'title' in property_data else '',
                #         # }
                #         config_values['selector_type'] = config_data.get('type', '')
                #     if '"contact":' in config_data:
                #         # config_values = {
                #         #     'contact_type': config_data.get('type', ''),
                #         #     'contact_mode': config_data.get('mode', ''),
                #         #
                #         # }
                #         config_values['contact_type'] = config_data.get('type', '')
                #         config_values['contact_mode'] = config_data.get('mode', '')
                #     if '"table":' in config_data:
                #         pass
                #         # config_values = {
                #         #     'table_children': config_data.get('un_print', None),
                #         # }
                #     if '"attendance":' in config_data:
                #         pass
                #         # config_values = {
                #         #     'attendance_type': config_data.get('un_replace', None),
                #         #     'attendance_date_range_type': config_data.get('display', None),
                #         #     # 如果需要设置content_ids，请按照正确格式添加关联数据
                #         # }
                #     if '"vacation_list":' in config_data:
                #         pass
                #         # config_values = {
                #         #     'vacation_list': config_data['template_names'][0]['text'],
                #         #     # 如果需要设置content_ids，请按照正确格式添加关联数据
                #         # }
                #
                #     content_data_list.append((0, 0, {
                #         'property_id': [(0, 0, property_values)],
                #         'config_id': [(0, 0, config_values)],
                #     }))
                # else:
                #     content_data_list.append((0, 0, {
                #         'property_id': [(0, 0, property_values)],
                #         # 'config_id': [(0, 0, config_values)],
                #     }))
            #     # 准备用于创建记录的字段值
            #     property_values = {
            #         'control_type': property_data.get('control', ''),
            #         'unique_control_id': property_data.get('id', ''),
            #         'title': property_data['title'][0]['text'] if 'title' in property_data else '',
            #         'placeholder': property_data['placeholder'][0]['text'] if 'placeholder' in property_data else '',
            #         'require': property_data.get('require', None),
            #         'un_print': property_data.get('un_print', None),
            #         'un_replace': property_data.get('un_replace', None),
            #         'display': property_data.get('display', None),
            #     }
            #
            #     if 'config' in control_data:
            #         config_data = control_data['config']
            #
            #         # 根据config_data为config.model的One2many字段（如options和table_children）构建命令列表
            #         option_vals = [
            #             (0, 0, {'key': 'option_key_1', 'text': 'option_text_1', 'lang': 'zh_CN'}),
            #             (0, 0, {'key': 'option_key_2', 'text': 'option_text_2', 'lang': 'zh_CN'})
            #         ]
            #         vacation_vals = [{'key': 'vacation_key_1', 'text': 'vacation_text_1', 'lang': 'zh_CN'},
            #                          {'key': 'vacation_key_2', 'text': 'vacation_text_2', 'lang': 'zh_CN'}]
            #         table_children_vals = [
            #             (0, 0, {
            #                 'control_type': 'Text',
            #                 'unique_control_id': 'control_id_1',
            #                 'title': '控件名称1',
            #                 'placeholder': '控件说明1',
            #                 'require': True
            #             }),
            #             (0, 0, {
            #                 'control_type': 'Number',
            #                 'unique_control_id': 'control_id_2',
            #                 'title': '控件名称2',
            #                 'placeholder': '控件说明2',
            #                 'require': False
            #             })
            #         ]
            #
            #         # property_vals = [
            #         #     (0, 0, {
            #         #         'control_type': 'Text',
            #         #         'unique_control_id': 'control_id_1',
            #         #         'title': '控件名称1',
            #         #         'placeholder': '控件说明1',
            #         #         'require': True
            #         #     }),
            #         #     (0, 0, {
            #         #         'control_type': 'Number',
            #         #         'unique_control_id': 'control_id_2',
            #         #         'title': '控件名称2',
            #         #         'placeholder': '控件说明2',
            #         #         'require': False
            #         #     })
            #         # ]
            #
            #         config_values = {
            #             'date_type': config_data.get('type', '') if '"date":' in config_data else '',
            #             'selector_type': config_data.get('type', '') if '"selector":' in config_data else '',
            #             'contact_type': config_data.get('type', '') if '"contact":' in config_data else '',
            #             'contact_mode': config_data.get('mode', '') if '"contact":' in config_data else '',
            #             'options': option_vals if '"selector":' in config_data else [(6, 0, [])],  # 使用示例中的option_vals
            #             'table_children': table_children_vals if '"table":' in config_data else [(6, 0, [])],
            #             # 使用示例中的property_vals
            #             'vacation_list': vacation_vals if '"vacation_list":' in config_data else []  # 添加vacation_vals
            #         }
            #
            #     content_data_list.append((0, 0, {
            #         'property_id': [(0, 0, property_values)],
            #         'config_id': [(0, 0, config_values)] if 'config' in control_data else [(6, 0, [])],
            #     }))
            #
            # # 准备用于创建记录的字段值，包括content_ids数据
            # values = {
            #     'process_code': template,
            #     'name': template_detail['template_names'][0]['text'],
            #     'content_ids': content_data_list,
            # }
            #
            # # 使用create方法创建记录
            # new_record = self.env['wxwork.approval.template'].create(values)


class WxTemplateSettings(models.Model):
    _name = 'wxwork.template.settings'
    _description = '企业微信模板设置'

    sp_name = fields.Char(string='审批模板名称')
    template_id = fields.Char(string='审批模板ID')
    # wxwork_id = fields.Many2one('wxwork.settings', string='企业微信')
