package com.ruoyi.web.controller;


import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.DataSource;
import com.zkqy.datamodeling.service.ITableInfoService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;

@Anonymous
@RestController
@RequestMapping("tableInfo")
public class TableInfoController {

    @Resource
    private ITableInfoService tableInfoService;

//    @PostMapping("/createDatabase")
//    public AjaxResult crateDatabase(@RequestBody Map<String, Object> map) {
//        String dataBaseName = (String) map.get("dataBaseName");
//        String tableName = (String) map.get("tableName");
//        if (tableInfoService.mysqlTableExist(dataBaseName, tableName) > 0) {
//            return AjaxResult.warn("当前数据库中表已存在");
//        }
//        tableInfoService.createMysqlTable(map);
//        return AjaxResult.success();
//    }
//
//    @PostMapping("/createSqlServerDataBase")
//    public AjaxResult createSqlServerDataBase(@RequestBody Map<String, Object> map) throws Exception {
//        String dataBaseName = (String) map.get("dataBaseName");
//        String tableName = (String) map.get("tableName");
//        if (tableInfoService.sqlServerTableExist(dataBaseName, tableName) > 0) {
//            return AjaxResult.warn("当前数据库中表已存在");
//        }
//        tableInfoService.createSqlServerDataBase(map);
//        return AjaxResult.success();
//    }
//
//    @PostMapping("/createDmDataBase")
//    public AjaxResult createDmDataBase(@RequestBody Map<String, Object> map) {
//        String dataBaseName = (String) map.get("dataBaseName");
//        String tableName = (String) map.get("tableName");
//        if (tableInfoService.dmTableExist(dataBaseName, tableName) > 0) {
//            return AjaxResult.warn("当前数据库中表已存在");
//        }
//        tableInfoService.createDmDataBase(map);
//        return AjaxResult.success();
//    }
//
//    @PostMapping("/createOracleTable")
//    public AjaxResult createOracleTable(@RequestBody Map<String, Object> map) {
//        String tableName = (String) map.get("tableName");
//        if (tableInfoService.oracleTableExist(tableName) > 0) {
//            return AjaxResult.warn("当前数据库中表已存在");
//        }
//        tableInfoService.createOracleTable(map);
//        return AjaxResult.success();
//    }

    //---------------------------------------通用接口（支持mysql、sqlserver、达梦）-----------------------------------------------------

    /**
     * 新增数据库和表
     */
    @PostMapping("/createTable")
    public AjaxResult createTable(@RequestBody Map<String, Object> map) {
        return tableInfoService.createTable(map);
    }

    /**
     * 根据当前数据源显示对应的数据表列表
     */
    @GetMapping("/tableInfoList")
    public AjaxResult tableInfoList(@RequestParam Map<String, Object> map) {
        return tableInfoService.tableInfoList(map);
    }

    /**
     * 根据当前数据源删除对应的数据表
     */
    @PostMapping("/removeTable")
    public AjaxResult removeTable(@RequestBody Map<String, Object> map) {
        return tableInfoService.dropTable(map);
    }

    /**
     * 获取表字段
     */
    @PostMapping("/tableFieldInfo")
    public AjaxResult tableFieldInfo(@RequestBody Map<String, Object> map) {
        return AjaxResult.success(tableInfoService.tableFieldInfo(map));
    }

    /**
     * 修改数据表
     */
    @PostMapping("/editTable")
    public AjaxResult editTable(@RequestBody Map<String, Object> map) {
        return tableInfoService.updateTable(map);
    }

    //---------------------------------------通用接口-----------------------------------------------------


//    @PutMapping("/editMysqlTable")
//    public AjaxResult editMysqlTable(@RequestBody Map<String, Object> map) {
//        String tableName = (String) map.get("tableName");
//        if (tableInfoService.selectDataCount(tableName) > 0) {
//            return AjaxResult.warn("表中有数据,不能修改!");
//        }
//        tableInfoService.updateMysqlTable(map);
//        return AjaxResult.success();
//
//    }
//
//    /**
//     * 删除sqlserver数据表
//     */
//    @DeleteMapping("/dropServerTable/{tableName}")
//    public AjaxResult dropServerTable(@PathVariable String tableName) {
//        if (tableInfoService.selectSqlServerDataCount(tableName) > 0) {
//            return AjaxResult.warn("表中有数据,不能删除!");
//        }
//        tableInfoService.dropSqlserverTable(tableName);
//        return AjaxResult.success();
//    }
//
//    /**
//     * 修改sqlserver数据表
//     */
//    @PutMapping("/editSqlserverTable")
//    public AjaxResult editSqlserverTable(@RequestBody Map<String, Object> map) {
//        String tableName = (String) map.get("tableName");
//        if (tableInfoService.selectSqlServerDataCount(tableName) > 0) {
//            return AjaxResult.warn("表中有数据,不能修改!");
//        }
//        tableInfoService.updateSqlserverTable(map);
//        return AjaxResult.success();
//    }


    /**
     * 初始化数据库，基础表
     */
    @PostMapping("/initDatabase")
    public AjaxResult initDatabase(@RequestBody DataSource dataSource) {
        return tableInfoService.initDatabase(dataSource);
    }

}
