package dao

import (
	"github.com/LoveLosita/smartflow/backend/model"
	"github.com/LoveLosita/smartflow/backend/respond"
	"gorm.io/gorm"
)

type TaskDAO struct {
	// 这是一个口袋，用来装数据库连接实例
	db *gorm.DB
}

// NewTaskDAO 创建TaskDAO实例
// NewTaskDAO 接收一个 *gorm.DB，并把它塞进结构体的口袋里
func NewTaskDAO(db *gorm.DB) *TaskDAO {
	return &TaskDAO{
		db: db,
	}
}

func (r *TaskDAO) WithTx(tx *gorm.DB) *TaskDAO {
	return &TaskDAO{db: tx}
}

// AddTask 为指定用户添加任务
func (dao *TaskDAO) AddTask(req *model.Task) (*model.Task, error) {
	if err := dao.db.Create(req).Error; err != nil {
		return nil, err
	}
	return req, nil
}

func (dao *TaskDAO) GetTasksByUserID(userID int) ([]model.Task, error) {
	var tasks []model.Task
	if err := dao.db.Where("user_id = ?", userID).Find(&tasks).Error; err != nil {
		return nil, err
	}
	if len(tasks) == 0 { // 如果没有任务，返回自定义错误
		return nil, respond.UserTasksEmpty
	}
	return tasks, nil
}
