package org.springblade.datasource.transform;

import org.springblade.datasource.enums.DsTypeEnum;
import org.springblade.datasource.transform.general.GeneralModel;
import org.springblade.datasource.transform.seatunnel.SeatunnelColumnType;
import org.springblade.etl.entity.SqlColumn;
import org.springblade.etl.entity.bi.ReportDatasource;

import java.sql.SQLException;
import java.util.List;

/**
 * @author 喜欢番茄火锅
 * @date 2023/8/16 17:36
 */
public interface ITransform {

    /**
     * 翻译数据库字段
     *
     * @return
     */
    List<ColumnInfo> transformColumns(List<GeneralModel> model, List<SqlColumn> sqlColumns);

    /**
     * @param columnType
     * @return
     */
    default SeatunnelColumnType transformToSeatunnelType(String columnType) {
        return null;
    }

    /**
     * 根据通用表信息创建表对象
     *
     * @param tableInfo
     * @param targetDatasource
     * @return
     * @author 王瑞
     * @date 2023/8/21
     */
    void creatTable(TableInfo tableInfo, ReportDatasource targetDatasource, boolean deleteSourceTable);

    /**
     * 将源信息转换成通用表数据
     *
     * @param sourceDatasource
     * @param model
     * @param tableViewName
     * @param tableComment
     * @return {@link TableInfo}
     * @author 王瑞
     * @date 2023/8/21
     */
    TableInfo parseTableInfo(ReportDatasource sourceDatasource, List<GeneralModel> model, String tableViewName, String tableComment);

    /**
     * 获取原表字段信息
     *
     * @param tableViewName
     * @param datasource
     * @return {@link List< ColumnInfo>}
     * @author 王瑞
     * @date 2023/12/25
     */
    List<ColumnInfo> getSourceColumn(String tableViewName, ReportDatasource datasource) throws SQLException;

    /**
     * 数据源类型
     *
     * @return
     */
    DsTypeEnum dsType();
}
