package cn.stylefeng.guns.dbcontainer.modular.controller;

import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory;
import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.dbcontainer.core.util.DbUtil;
import cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam;
import cn.stylefeng.guns.dbcontainer.modular.service.DatabaseInfoService;
import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.util.ToolUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;


/**
 * 数据库信息表控制器
 *
 * @author stylefeng
 * @Date 2019-06-15 17:05:23
 */
@Controller
@RequestMapping("/databaseInfo")
public class DatabaseInfoController extends BaseController {

    /**
     * session中标识已选择条件字段的key
     */
    public static String CONDITION_FIELDS = "CONDITION_FIELDS";

    private String PREFIX = "/databaseInfo";

    @Autowired
    private DatabaseInfoService databaseInfoService;

    /**
     * 跳转到主页面
     *
     * @author stylefeng
     * @Date 2019-06-15
     */
    @RequestMapping("")
    public String index() {
        return PREFIX + "/databaseInfo.html";
    }

    /**
     * 新增页面
     *
     * @author stylefeng
     * @Date 2019-06-15
     */
    @RequestMapping("/add")
    public String add() {
        return PREFIX + "/databaseInfo_add.html";
    }

    /**
     * 编辑页面
     *
     * @author stylefeng
     * @Date 2019-06-15
     */
    @RequestMapping("/edit")
    public String edit() {
        return PREFIX + "/databaseInfo_edit.html";
    }

    /**
     * 新增接口
     *
     * @author stylefeng
     * @Date 2019-06-15
     */
    @RequestMapping("/addItem")
    @ResponseBody
    public ResponseData addItem(DatabaseInfoParam databaseInfoParam) {
        this.databaseInfoService.add(databaseInfoParam);
        return ResponseData.success();
    }

    /**
     * 编辑接口
     *
     * @author stylefeng
     * @Date 2019-06-15
     */
    @RequestMapping("/editItem")
    @ResponseBody
    public ResponseData editItem(DatabaseInfoParam databaseInfoParam) {
        this.databaseInfoService.update(databaseInfoParam);
        return ResponseData.success();
    }

    /**
     * 删除接口
     *
     * @author stylefeng
     * @Date 2019-06-15
     */
    @RequestMapping("/delete")
    @ResponseBody
    public ResponseData delete(DatabaseInfoParam databaseInfoParam) {
        this.databaseInfoService.delete(databaseInfoParam);
        return ResponseData.success();
    }

    /**
     * 查看详情接口
     *
     * @author stylefeng
     * @Date 2019-06-15
     */
    @RequestMapping("/detail")
    @ResponseBody
    public ResponseData detail(DatabaseInfoParam databaseInfoParam) {
        DatabaseInfo detail = this.databaseInfoService.getById(databaseInfoParam.getDbId());
        return ResponseData.success(detail);
    }

    /**
     * 查询列表
     *
     * @author stylefeng
     * @Date 2019-06-15
     */
    @ResponseBody
    @RequestMapping("/list")
    public LayuiPageInfo list(DatabaseInfoParam databaseInfoParam) {
        return this.databaseInfoService.findPageBySpec(databaseInfoParam);
    }

    /**
     * 获取某个数据源下的所有表
     *
     * @author fengshuonan
     * @Date 2019/1/30 2:49 PM
     */
    @RequestMapping("/tableList")
    @ResponseBody
    public Object tableList(Long dbId, HttpServletRequest request) {

        if (ToolUtil.isEmpty(dbId)) {
            return new LayuiPageInfo();
        }

        //清空session中的字段条件信息
        HttpSession session = request.getSession();
        session.removeAttribute(CONDITION_FIELDS);

        try {
            DatabaseInfo databaseInfo = databaseInfoService.getById(dbId);
            List<Map<String, Object>> maps = DbUtil.selectTables(databaseInfo);
            Page<Map<String, Object>> objectPage = new Page<>();
            objectPage.setRecords(maps);
            return LayuiPageFactory.createPageInfo(objectPage);
        } catch (Exception e) {
            Page<Map<String, Object>> objectPage = new Page<>();
            return LayuiPageFactory.createPageInfo(objectPage);
        }
    }
}


