package dbuser

import (
	"context"

	"go.uber.org/zap"

	"github.com/tidbcloud/tiinf/monitor/tilog"

	"github.com/tidbcloud/account/internel/dao/dbuser"

	"github.com/tidbcloud/account/internel/dao/entity"
)

func (r *DBUserSvc) CreateCommandOrgKey(ctx context.Context, orgId uint64, status entity.CommandStatus, action entity.CommandAction) error {

	return r.hub.DBUser.CreateCommandOrgKey(ctx, r.db, orgId, status, action)
}

func (r *DBUserSvc) CreateCommandOrgKeyIfNotExist(ctx context.Context, orgId uint64, status entity.CommandStatus, action entity.CommandAction) error {
	filter := dbuser.CommandOrgKeyFilter{
		OrgIDs: []entity.ID{entity.ID(orgId)},

		Status:  []entity.CommandStatus{status},
		Actions: []entity.CommandAction{action},
	}
	commandOrgKeys, err := r.hub.DBUser.ListCommandOrgKeys(ctx, r.db, filter)
	tilog.Info(ctx, "ListCommandOrgKeys result", zap.Any("commandOrgKeys", commandOrgKeys), zap.Any("err", err))
	if err != nil {
		tilog.Error(ctx, "ListCommandOrgKeys error", zap.Any("err", err), zap.Any("commandOrgKeys", commandOrgKeys))
		return err
	}
	if len(commandOrgKeys) == 0 {
		return r.hub.DBUser.CreateCommandOrgKey(ctx, r.db, orgId, status, action)
	}

	return nil
}

func (r *DBUserSvc) ListCommandOrgKeys(ctx context.Context, filter dbuser.CommandOrgKeyFilter) ([]entity.CommandOrgKey, error) {

	return r.hub.DBUser.ListCommandOrgKeys(ctx, r.db, filter)
}

func (r *DBUserSvc) UpdateCommandOrgKey(ctx context.Context, orgId uint64, status entity.CommandStatus, action entity.CommandAction) error {

	return r.hub.DBUser.UpdateCommandOrgKey(ctx, r.db, orgId, status, action)
}

func (r *DBUserSvc) DeleteCommandOrgKey(ctx context.Context, orgId uint64) error {

	return r.hub.DBUser.DeleteOrgKey(ctx, r.db, orgId)
}
