package com.zkqy.system.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zkqy.common.utils.DateUtils;
import com.zkqy.common.utils.StringUtils;
import com.zkqy.system.entity.CommonEntity;
import com.zkqy.system.entity.DragForm;
import com.zkqy.system.entity.DragFormGroup;
import com.zkqy.system.service.IDragFormService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zkqy.system.mapper.DragFormGroupMapper;
import com.zkqy.system.service.IDragFormGroupService;

/**
 * 动态表单组Service业务层处理
 *
 * @author hzh
 * @date 2024-01-26
 */
@Service
public class DragFormGroupServiceImpl implements IDragFormGroupService {
    @Autowired
    private DragFormGroupMapper dragFormGroupMapper;

    @Autowired
    private IDragFormService iDragFormService;

    /**
     * 查询动态表单组
     *
     * @param id 动态表单组主键
     * @return 动态表单组
     */
    @Override
    public DragFormGroup selectDragFormGroupById(Long id) {
        return dragFormGroupMapper.selectDragFormGroupById(id);
    }

    @Override
    public DragFormGroup selectDragFormGroupByGroupKey(String groupKey) {

        // 得到表单组信息
        DragFormGroup dragFormGroup = dragFormGroupMapper.selectDragFormGroupByGroupKey(groupKey);

        // 根据表单组中的keys信息 获取对应动态表单的信息
        String[] formKeys = JSON.parseArray(dragFormGroup.getFormKeys()).toArray(String.class);


        // 得到当前表单组绑定的按钮
        List<DragForm> dragFormList = iDragFormService.selectDragFormByFormKeys(formKeys);


        // 当前表单组关系
        Map<String, Object> relationJsonMap = (Map<String, Object>) JSON.parse(dragFormGroup.getRelationJson());

        // 主表单增加模版信息
        dragFormList.forEach(ftem -> {
            if (ftem.getFormKey().equals(((Map) relationJsonMap.get("mainForm")).get("formKey"))) {
                ((Map) relationJsonMap.get("mainForm")).put("showTemplate", ftem);
            }
        });

        // 从表单增加模版信息
        ((ArrayList) relationJsonMap.get("subFormList")).forEach(rtem -> {
            ((Map) rtem).put("showTemplate", dragFormList.stream().filter(ftem -> ftem.getFormKey().equals(((Map) rtem).get("formKey"))).findFirst().get());
        });
        // 替换处理之后的结果
        dragFormGroup.setRelationJson(relationJsonMap.toString());

        return dragFormGroup;
    }

    /**
     * 查询动态表单组列表
     *
     * @param dragFormGroup 动态表单组
     * @return 动态表单组
     */
    @Override
    public List<DragFormGroup> selectDragFormGroupList(DragFormGroup dragFormGroup) {
        return dragFormGroupMapper.selectDragFormGroupList(dragFormGroup);
    }

    /**
     * 新增动态表单组
     *
     * @param dragFormGroup 动态表单组
     * @return 结果
     */
    @Override
    public int insertDragFormGroup(DragFormGroup dragFormGroup) {
        dragFormGroup.setCreateTime(DateUtils.getNowDate());
        return dragFormGroupMapper.insertDragFormGroup(dragFormGroup);
    }

    /**
     * 修改动态表单组
     *
     * @param dragFormGroup 动态表单组
     * @return 结果
     */
    @Override
    public int updateDragFormGroup(DragFormGroup dragFormGroup) {
        dragFormGroup.setUpdateTime(DateUtils.getNowDate());
        return dragFormGroupMapper.updateDragFormGroup(dragFormGroup);
    }

    /**
     * 批量删除动态表单组
     *
     * @param ids 需要删除的动态表单组主键
     * @return 结果
     */
    @Override
    public int deleteDragFormGroupByIds(Long[] ids) {
        return dragFormGroupMapper.deleteDragFormGroupByIds(ids);
    }

    /**
     * 删除动态表单组信息
     *
     * @param id 动态表单组主键
     * @return 结果
     */
    @Override
    public int deleteDragFormGroupById(Long id) {
        return dragFormGroupMapper.deleteDragFormGroupById(id);
    }
}
