package cn.gov.customs.wxjy.generator.service;

import cn.gov.customs.wxjy.generator.pojo.GenTable;
import cn.gov.customs.wxjy.generator.pojo.GenTableQuery;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * 代码生成业务Service接口
 *
 * @author xiong
 * @date 2025-12-25
 */
public interface IGenTableService {
    /**
     * 查询代码生成业务
     *
     * @param tableId 代码生成业务主键
     * @return 代码生成业务
     */
    public GenTable selectByTableId(String tableId);

    /**
     * 分页查询代码生成业务列表
     *
     * @param query
     * @return 代码生成业务集合
     */
    public PageInfo<GenTable> selectPageList(GenTableQuery query);

    /**
     * 查询代码生成业务列表
     *
     * @param query
     * @return 代码生成业务集合
     */
    public List<GenTable> selectList(GenTableQuery query);

    /**
     * 新增代码生成业务
     *
     * @param genTable 代码生成业务
     * @return 结果
     */
    public int insert(GenTable genTable);

    /**
     * 修改代码生成业务
     *
     * @param genTable 代码生成业务
     * @return 结果
     */
    public int update(GenTable genTable);

    /**
     * 批量删除代码生成业务
     *
     * @param ids 需要删除的ids主键集合
     * @return 结果
     */
    public int deleteByTableIds(String[] ids);

    /**
     * 删除代码生成业务信息
     *
     * @param tableId 代码生成业务主键
     * @return 结果
     */
    public int deleteByTableId(String tableId);

    /**
     * 逻辑删除代码生成业务信息
     *
     * @param tableId 代码生成业务主键
     * @return 结果
     */
    public int logicDelete(String tableId);

    /**
     * 导入代码生成业务数据
     *
     * @param genTableList 代码生成业务数据列表
     * @param userName 操作用户
     * @return 结果
     */
    public void importGenTable(List<GenTable> genTableList, String userName);

    List<GenTable> selectGenTableAll();

    PageInfo<GenTable> selectDbTableList(GenTableQuery query);

    List<GenTable> selectDbTableListByNames(String[] tableNames);

    void validateEdit(GenTable genTable);

    Map<String, String> previewCode(String tableId);

    byte[] downloadCode(String tableName);

    /**
     * 批量生成代码（下载方式）
     *
     * @param tableNames 表数组
     * @return 数据
     */
    public byte[] downloadCode(String[] tableNames);


    void generatorCode(String tableName);

    void synchDb(String tableName);
}
