package com.ruoyi.project.system.service.impl;

import com.alibaba.druid.support.json.JSONUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.project.system.domain.TbForm;
import com.ruoyi.project.system.domain.TbFormModule;
import com.ruoyi.project.system.mapper.TbFormMapper;
import com.ruoyi.project.system.mapper.TbFormModuleMapper;
import com.ruoyi.project.system.service.ITbFormService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 【请填写功能名称】Service业务层处理
 *
 * @author ruoyi
 * @date 2020-06-16
 */
@Service
public class TbFormServiceImpl implements ITbFormService
{
    @Autowired
    private TbFormMapper tbFormMapper;
    @Autowired
    private TbFormModuleMapper tbFormModuleMapper;

    /**
     * 根据id查询表信息
     * @param tableName 表名
     * @param id 信息id
     * @return 查询数据
     */
    @Override
    public Map selAutoTableById(String tableName, Long id) {
        return tbFormMapper.selAutoTableById(tableName,id);
    }

    /**
     * 动态修改表名
     * @param
     * @return
     */
    @Override
    public int alterTableName(String oldtableName, String newtableName) {
        return tbFormMapper.alterTableName(oldtableName,newtableName);
    }

    /**
     * code
     *    0代表空值
     *    1代表有值
     *    3代表没有值
     * @param tableName
     * @return
     */
       @Override
    public int selecltTable(String tableName) {
        int code = 0;
        String result = tbFormMapper.selecltTable(tableName);
        Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
        Matcher m = p.matcher(tableName);
        if (result == null){
            code = 3;
            if (m.find()){
                return code=1;
            }
            return code;
        }else{
            code = 1;
            return code;
        }

    }
    @Override
    public String selecltTableBytabName(String tableName){

        String result = tbFormMapper.selecltTableBytabName(tableName);
        return result;
    }

    /**
     * 查询【请填写功能名称】
     *
     * @param id 【请填写功能名称】ID
     * @return 【请填写功能名称】
     */
    @Override
    public TbForm selectTbFormById(Long id)
    {
        return tbFormMapper.selectTbFormById(id);
    }

    /**
     * 查询【请填写功能名称】列表
     *
     * @param tbForm 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<TbForm> selectTbFormList(TbForm tbForm)
    {
        return tbFormMapper.selectTbFormList(tbForm);
    }

    /**
     * 新增【请填写功能名称】
     *
     * @param tbForm 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertTbForm(TbForm tbForm)
    {
        tbForm.setFormId(UUID.randomUUID().toString().replaceAll("-",""));
        tbForm.setCreateTime(DateUtils.getNowDate());
        return tbFormMapper.insertTbForm(tbForm);
    }

    /**
     * 修改【请填写功能名称】
     *
     * @param tbForm 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateTbForm(TbForm tbForm)
    {
        return tbFormMapper.updateTbForm(tbForm);
    }
 /**
     * 批量删除【请填写功能名称】
     *
     * @return 结果
     */
    @Override
    public int deleteTbFormByIds(String[] action) {
        return tbFormMapper.deleteTbFormByIds(action);
    }

    /**
     * 删除表
     *
     * @param
     * @return 结果
     */
    @Override
    public int deleteTable1(String[] action) {

        return tbFormMapper.deleteTable(action);
    }

    /**
     * 删除【请填写功能名称】信息
     *
     * @param id 【请填写功能名称】ID
     * @return 结果
     */
    @Override
    public int deleteTbFormById(Long id) {
        return tbFormMapper.deleteTbFormById(id);
    }

    /**
     * 动态创建表
     *
     * @return
     */
    @Override
    public int createTable(String action) {

        return tbFormMapper.createTable(action);
    }

    public int altTalbe(String tableName,String fildes, String vuejson) {
        String[] arr = new String[]{tableName};
        tbFormModuleMapper.deleteTableZJ(tableName);
        tbFormMapper.deleteTable(arr);
        tbFormMapper.createTable(tableName);

        List<Map> list= (List<Map>) JSONUtils.parse(fildes);
        int i=0;
        List<TbFormModule> tbFormModules=new ArrayList<>();

        int tb=tbFormMapper.updateTbFormJson(tableName,vuejson,fildes);
        System.out.println("添加vuejson数据结果为   :   "+(tb==1? "ok" :"error"));

        for (Map map:list){
            TbFormModule tbFormModule = new TbFormModule();
            tbFormModule.setInputName(String.valueOf(map.get("vModel")));
            tbFormModule.setFormid(tableName);
            tbFormModule.setInputTitle(String.valueOf(map.get("label")));
            //判断存入数据库表字段类型。
            String type="varchar(255)";
            if(String.valueOf(map.get("taglcon")).contains("number,slider")){
                type="int(11)";
            }else if (String.valueOf(map.get("taglcon")).equals("switch")){
                type="tinyint(1)";
            }else if (String.valueOf(map.get("taglcon")).equals("textarea")){
                type="longtext(0)";
            }else if (String.valueOf(map.get("taglcon")).equals("date")){
                type="datatime(0)";
            }
            tbFormModule.setInputType(type);
            tbFormModule.setNotNull(map.get("required").equals("ture")?1:0);
            tbFormModules.add(tbFormModule);
            i+=tbFormModuleMapper.insertTbFormModule(tbFormModule);
        }
        tbFormMapper.altTalbe(tableName, tbFormModules);
        return i;
    }

    @Override
    public List<Map> selAutoTable(String tableName) {
        System.err.println(tableName);
        return tbFormMapper.selAutoTable(tableName);
    }

    @Override
    public int altDeleteZD(String tableName, List<TbFormModule> tbFromModule) {
        return tbFormMapper.altDeleteZD(tableName,tbFromModule);
    }
}
