package database

import (
	"github.com/glebarez/sqlite"
	"github.com/pingcap/log"
	"github.com/tidbcloud/observability/o11ymetering/pkg/common/models"
	"go.uber.org/zap"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

func GetSqliteDB(localFile string) (*Database, error) {
	base, err := gorm.Open(sqlite.Open(localFile+"?_busy_timeout=5000&_txlock=immediate"), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Error),
	})
	if err != nil {
		return nil, err
	}
	_ = base.Exec("PRAGMA synchronous = OFF;")
	_ = base.Exec("PRAGMA journal_mode=WAL;")

	err = base.AutoMigrate(models.StatisticRecord{})
	if err != nil {
		log.Error(err.Error())
	}
	err = base.AutoMigrate(models.StatisticTask{})
	if err != nil {
		log.Error(err.Error())
	}
	return &Database{base: base}, nil
}

func CloseSqliteDB(db *Database) {
	if db == nil || db.base == nil {
		return
	}
	sqlDB, err := db.base.DB()
	if err != nil {
		log.Warn("Failed to get SQL DB from GORM base", zap.Error(err))
		return
	}
	err = sqlDB.Close()
	if err != nil {
		log.Warn("Failed to get SQL DB from GORM base", zap.Error(err))
	}
	return
}
