package org.nl.system.service.generator;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
import org.nl.system.service.generator.dao.CodeColumnConfig;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.system.service.generator.dao.CodeGenConfig;
import org.nl.system.service.generator.dto.TablesInfo;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Async;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>
 * 列的数据信息表 服务类
 * </p>
 *
 * @author lyd
 * @since 2023-05-03
 */
public interface ICodeGeneratorService extends IService<CodeColumnConfig> {

    /**
     * 获得所有的表格信息
     * @return
     */
    IPage<TablesInfo> getTables(String name, PageQuery pageQuery);

    /**
     * 得到数据表的元数据
     * @param tableName 表名
     * @return /
     */
    IPage<CodeColumnConfig> getColumns(String tableName);

    /**
     * 根据表名查询表字段
     * @param tableName
     * @return
     */
    List<CodeColumnConfig> query(String tableName);

    /**
     * 同步表数据
     * @param columnInfos /
     * @param columnInfoList /
     */
    @Async
    void sync(IPage<CodeColumnConfig> columnInfos, List<CodeColumnConfig> columnInfoList);

    ResponseEntity<Object> preview(CodeGenConfig byTableName, IPage<CodeColumnConfig> columns);

    /**
     * 打包下载
     * @param genConfig 配置信息
     * @param columnsPage 字段信息分页数据
     * @param request /
     * @param response /
     */
    void download(CodeGenConfig genConfig, IPage<CodeColumnConfig> columnsPage, HttpServletRequest request, HttpServletResponse response);

    /**
     * 代码生成
     * @param genConfig 配置信息
     * @param columnsPage 字段信息分页数据
     */
    void generator(CodeGenConfig genConfig, IPage<CodeColumnConfig> columnsPage);
}
