package dao

import (
	"github.com/hashicorp/go-multierror"
	"github.com/pingcap/tispector/service/checker"
)

type FileDaoImpl struct {
}

var File FileDaoImpl

// ListAllFiles 从数据库中读取所有文件信息并返回
func (FileDaoImpl) ListAllFiles() ([]checker.TispectorFile, error) {
	var files []checker.TispectorFile
	return files, GetDB().Find(&files).Error
}

// GetFileByName 通过文件名从数据库中获取文件信息
func (FileDaoImpl) GetFileByName(Name string) (checker.TispectorFile, error) {
	var errs error
	var file checker.TispectorFile
	err := GetDB().First(&file, "name = ?", Name).Error
	errs = multierror.Append(err, errs)
	return file, errs
}

// AddFile 添加文件信息
func (FileDaoImpl) AddFileInfo(file checker.TispectorFile) (string, error) {
	tx := GetDB().Begin()
	if err := tx.Create(file).Error; err != nil {
		tx.Rollback()
		return "", err
	}

	return file.Name, tx.Commit().Error
}

// DelFileByName 通过文件名删除对应信息
func (FileDaoImpl) DelFileByName(Name string) error {
	return GetDB().Where("name = ?", Name).Delete(&checker.TispectorFile{}).Error
}
