package com.mini.capi.utils;

import com.mini.capi.biz.domain.DataTableField;
import com.mini.capi.biz.domain.DataTableInfo;

import java.util.List;

public class SqlUtils {


    /**
     * 生成CREATE TABLE语句
     *
     * @param tableInfo 数据表基础信息
     * @param fieldList 字段列表
     * @return CREATE TABLE语句
     */
    public static String CreateTableSql(DataTableInfo tableInfo, List<DataTableField> fieldList) {
        StringBuilder sb = new StringBuilder();
        // 表定义开始
        sb.append("CREATE TABLE ").append(tableInfo.getTableName()).append(" (\n");
        // 拼接字段定义
        for (int i = 0; i < fieldList.size(); i++) {
            DataTableField field = fieldList.get(i);
            sb.append("  ").append(field.getFieldName()).append(" ");
            // 处理字段类型和长度
            if (field.getFieldLength() != null && field.getFieldLength() > 0) {
                sb.append(field.getFieldType()).append("(").append(field.getFieldLength()).append(") ");
            } else {
                sb.append(field.getFieldType()).append(" ");
            }

            // 处理主键（简单判断：fieldId为主键字段）
            if ("field_id".equals(field.getFieldName()) || "table_id".equals(field.getFieldName())) {
                sb.append("NOT NULL AUTO_INCREMENT ");
            } else {
                sb.append("DEFAULT NULL ");
            }

            // 字段注释
            if (field.getFieldRemark() != null && !field.getFieldRemark().isEmpty()) {
                sb.append("COMMENT '").append(field.getFieldRemark()).append("'");
            }

            // 最后一个字段不加逗号
            if (i != fieldList.size() - 1) {
                sb.append(",");
            }
            sb.append("\n");
        }
        // 表引擎和字符集
        sb.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ");
        // 表注释
        if (tableInfo.getTableComment() != null && !tableInfo.getTableComment().isEmpty()) {
            sb.append("COMMENT\t'").append(tableInfo.getTableComment()).append("'");
        }
        sb.append(";");

        return sb.toString();
    }

    /**
     * 生成带注释的SELECT语句
     *
     * @param tableInfo 数据表基础信息
     * @param fieldList 字段列表
     * @return 带注释的SELECT语句
     */
    public static String SelectSqlComments(DataTableInfo tableInfo, List<DataTableField> fieldList) {
        StringBuilder sb = new StringBuilder();
        // 表注释
        sb.append("-- 表名：").append(tableInfo.getTableName()).append("\n");
        sb.append("-- 描述：").append(tableInfo.getTableComment() != null ? tableInfo.getTableComment() : "无").append("\n");
        sb.append("-- 数据来源：").append(tableInfo.getDataSource() != null ? tableInfo.getDataSource() : "未知").append("\n");
        // SELECT语句开始
        sb.append("SELECT\n");

        // 拼接字段（带注释）
        for (int i = 0; i < fieldList.size(); i++) {
            DataTableField field = fieldList.get(i);
            sb.append("  ").append(field.getFieldName()).append("");
            // 字段注释
            if (field.getFieldRemark() != null && !field.getFieldRemark().isEmpty()) {
                sb.append("  -- ").append(field.getFieldRemark());
            }
            // 最后一个字段不加逗号
            if (i != fieldList.size() - 1) {
                sb.append(",");
            }
            sb.append("\n");
        }

        // 表名
        sb.append("FROM ").append(tableInfo.getTableName()).append(";");

        return sb.toString();
    }
}
