package mysql

import (
	"context"

	"gorm.io/gorm"

	v1 "github.com/pingcap-inc/pchub/model/v1"
)

type userStarResource struct {
	db *gorm.DB
}

func newUserStarResource(ds *datastore) *userStarResource {
	return &userStarResource{db: ds.db}
}

func (usr *userStarResource) List(c context.Context, ularkID string) ([]*v1.UserStarResource, error) {
	var res []*v1.UserStarResource
	err := usr.db.
		Model(&v1.UserStarResource{}).
		Joins("User").
		Joins("Resource").
		Where("user_star_resource.userLarkID = ?", ularkID).
		Order("user_star_resource.createdAt DESC").
		Scan(&res).Error

	return res, err
}

func (usr *userStarResource) GetByUR(_ context.Context, ularkID string, rid uint64) (*v1.UserStarResource, error) {
	var res v1.UserStarResource
	d := usr.db.Where("userLarkID = ? && resourceID = ?", ularkID, rid).First(&res)

	return &res, dbNotFoundErrorWrap(d.Error)
}

func (usr *userStarResource) Create(_ context.Context, ularkID string, rid uint64) error {
	return usr.db.Create(&v1.UserStarResource{
		UserLarkID: ularkID,
		ResourceID: rid,
	}).Error
}

func (usr *userStarResource) Delete(c context.Context, id uint64) error {
	return usr.db.Delete(&v1.UserStarResource{ID: id}).Error
}
