package com.xjrsoft.xjrsoftboot;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.IoUtil;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.io.File;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

class CodeGenerator {


    public static void main(String[] args) {

        final String dbUrl = "jdbc:mysql://8.142.26.206:3306/tl?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true"; //数据库连接地址
        final String dbUserName = "root";//数据库账号
        final String dbPassword = "Zwr~-f6H,u6QE^]C-AD_"; //数据库密码
        final String authorName = "tzx";// 设置作者
        final String outputDir = getOutputDir(); // 指定输出目录
        final String parentModuleName = "com.xjrsoft.module";// 设置父包名
        final String moduelName = "print";// 设置父包模块名
        final List<String> tableNames = ListUtil.toList("base_class", "base_semester","base_course_subject"); //所需要生成 的表名称 可以多个
        final List<String> prefixs = ListUtil.toList("xjr_"); //所需要忽略的前缀 可以多个

        //拼接设置mapperXml生成路径
        StringBuilder mapperPath = new StringBuilder(outputDir);
        for (String s : parentModuleName.split("\\.")) {
            mapperPath.append(StringPool.SLASH).append(s);
        }
        mapperPath.append(StringPool.SLASH + moduelName + StringPool.SLASH + "mapper");

        FastAutoGenerator.create(dbUrl, dbUserName, dbPassword)
                .globalConfig(builder -> {
                    builder.author(authorName)// 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .outputDir(outputDir);// 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent(parentModuleName)// 设置父包名
                            .moduleName(moduelName)// 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapper, mapperPath.toString())); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude(tableNames) // 设置需要生成的表名
                            .addTablePrefix(prefixs); // 设置过滤表前缀
                })
//                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }

    /**
     * 获取生成目录 默认生成到src/main/java/com/xjrsoft/module
     */
    private static String getOutputDir() {
        String outDir = System.getProperty("user.dir") + StringPool.SLASH + "generator" + StringPool.SLASH + "main" + StringPool.SLASH + "java";
        File folder = new File(outDir);

        if (!folder.exists()) {
            if (folder.mkdirs()) {
                System.out.println("The folder is created successfully.");
            } else {
                System.out.println("Failed to create the folder.");
            }
        }
        return outDir;
    }


}
