package model

import (
	"context"
	"errors"

	"github.com/go-sql-driver/mysql"
	"gorm.io/gorm"

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

func CreateStar(ctx context.Context, userID, orgID uint) error {
	star := db.Star{
		UserID: uint64(userID),
		OrgID:  uint64(orgID),
	}
	return db.Transaction(func(tx *gorm.DB) error {
		var mysqlErr *mysql.MySQLError
		err := tx.WithContext(ctx).Create(&star).Error
		// 1062 is mysql duplicate key error code
		if errors.As(err, &mysqlErr) && mysqlErr.Number == 1062 {
			return nil
		}
		return err
	})
}

// DeleteStar hard delete star record form db
func DeleteStar(ctx context.Context, userID, orgID uint) error {
	return db.Transaction(func(tx *gorm.DB) error {
		return tx.WithContext(ctx).Exec("DELETE FROM star WHERE user_id = ? AND org_id = ?;", userID, orgID).Error
	})
}
