package service

import (
	"context"
	entity "dataapps/internal/entity/sqleditor"
	repository "dataapps/internal/repository/sqleditor"
	"fmt"
	"github.com/tidbcloud/tiinf/monitor/tilog"
)

// @Time    : 2022/11/21 11:25 AM
// @Author  : lvhongmeng

const (
	MAXFILECOUNT = 20
)

func CreateSQLFile(ctx context.Context, createdBy string, sqlfile entity.SqlEditorFile) (*uint64, error) {
	//res, err := repository.ListSQLFile(sqlfile.ClusterId, sqlfile.CreatedBy)
	//if err != nil {
	//	tilog.Error(ctx, fmt.Sprintf("ERROR:CreateSQLFile-list failed! sqlfileid:%v,error:%v,user:%s", sqlfile, err, createdBy))
	//	return nil, err
	//}
	//if len(res) < MAXFILECOUNT {
	//	id, err := repository.CreateSQLFile(sqlfile)
	//	if err != nil {
	//		tilog.Error(ctx, fmt.Sprintf("ERROR:CreateSQLFile failed! sqlfileid:%v,error:%v,user:%s", sqlfile, err, createdBy))
	//		return nil, err
	//	}
	//	return id, nil
	//} else {
	//	tilog.Error(ctx, fmt.Sprintf("ERROR:CreateSQLFile failed! sql file count exceed limit! sqlfileid:%v,error:%v,user:%s", sqlfile, err, createdBy))
	//	return nil, errors.Wrap(errs.ErrFilesInvalidSize, fmt.Sprintf("sql file count exceed limit "+strconv.Itoa(MAXFILECOUNT)))
	//}

	id, err := repository.CreateSQLFile(sqlfile)
	if err != nil {
		tilog.Error(ctx, fmt.Sprintf("ERROR:CreateSQLFile failed! sqlfileid:%v,error:%v,user:%s", sqlfile, err, createdBy))
		return nil, err
	}
	return id, nil

}

func ShowSQLFile(ctx context.Context, sqlfileId uint64, createdBy string) (*entity.SqlEditorFile, error) {
	res, err := repository.ShowSQLFile(sqlfileId, createdBy)
	if err != nil {
		tilog.Error(ctx, fmt.Sprintf("ERROR:ShowSQLFile failed!sqlid:%v,error:%v,user:%s", sqlfileId, err, createdBy))
		return nil, err
	}
	return res, nil
}

func UpdateSQLFile(ctx context.Context, createdBy string, sqlfile entity.SqlEditorFile) error {
	err := repository.UpdateSQLFile(sqlfile)
	if err != nil {
		tilog.Error(ctx, fmt.Sprintf("ERROR:UpdateSQLFile failed!sqlid:%v,error:%v,user:%s", sqlfile.ID, err, createdBy))
		return err
	}
	return nil

}

func DeleteSQLFile(ctx context.Context, sqlfileId uint64, createdBy string) error {
	err := repository.DeleteSQLFile(sqlfileId, createdBy)
	if err != nil {
		tilog.Error(ctx, fmt.Sprintf("ERROR: DeleteSQLFile failed!sqlid:%v,error:%v,user:%s", sqlfileId, err, createdBy))
		return err
	}
	return nil
}

func ListSQLFile(ctx context.Context, clusterId uint64, createdBy string) ([]*entity.SqlEditorFile, error) {
	res, err := repository.ListSQLFile(clusterId, createdBy)
	if err != nil {
		tilog.Error(ctx, fmt.Sprintf("ERROR: ListSQLFile failed! clusterid:%v,error:%v,user:%s", clusterId, err, createdBy))
		return nil, err
	}
	return res, nil
}
