package model

import (
	"gorm.io/gorm"
	"gorm.io/gorm/clause"

	"github.com/pingcap-inc/clinic/pkg/db"
)

// UpsertTask insert/update task
func UpsertTask(task *db.Task) error {
	return db.GetDB().Clauses(clause.OnConflict{
		Columns:   []clause.Column{{Name: "task_id"}},
		UpdateAll: true,
	}).Create(task).Error
}

func UpdateTaskProgress(taskID string, progress int) error {
	return db.Transaction(func(tx *gorm.DB) error {
		return tx.Model(&db.Task{}).Where("task_id=?", taskID).Update("progress", progress).Error
	})
}

func GetTask(taskID string) (*db.Task, error) {
	var t db.Task
	err := db.Transaction(func(tx *gorm.DB) error {
		return tx.Where("task_id = ?", taskID).First(&t).Error
	})
	return &t, err
}

func DeleteTask(taskID string) error {
	return db.Transaction(func(tx *gorm.DB) error {
		return tx.Where("task_id = ?", taskID).Delete(&db.Task{}).Error
	})
}
