package app

import (
	"context"

	storeapp "github.com/tidbcloud/AgentTeam/internal/store/app"
	"github.com/tidbcloud/AgentTeam/internal/store/serviceactor"
)

func (fake *fakeStore) ListInstallationExtensionsForUser(_ context.Context, _ string, _ string, installationID string) ([]storeapp.InstallationExtensionView, error) {
	fake.mu.Lock()
	defer fake.mu.Unlock()
	fake.lastExtensionInstallID = installationID
	return append([]storeapp.InstallationExtensionView(nil), fake.installationExtensions...), fake.installationExtensionErr
}

func (fake *fakeStore) AddInstallationExtensionForUser(_ context.Context, _ string, _ string, installationID, definitionDomain, extensionName string) (serviceactor.InstallationExtension, error) {
	fake.mu.Lock()
	defer fake.mu.Unlock()
	fake.lastExtensionInstallID = installationID
	fake.lastExtensionDomain = definitionDomain
	fake.lastExtensionName = extensionName
	fake.lastExtensionOperation = "add"
	result := fake.installationExtension
	result.ExtensionName = extensionName
	return result, fake.installationExtensionErr
}

func (fake *fakeStore) RenameInstallationExtensionForUser(_ context.Context, _ string, _ string, installationID, selectionID, extensionName string) (serviceactor.InstallationExtension, error) {
	fake.mu.Lock()
	defer fake.mu.Unlock()
	fake.lastExtensionInstallID = installationID
	fake.lastExtensionSelectionID = selectionID
	fake.lastExtensionName = extensionName
	fake.lastExtensionOperation = "rename"
	result := fake.installationExtension
	result.ExtensionName = extensionName
	return result, fake.installationExtensionErr
}

func (fake *fakeStore) EnableInstallationExtensionForUser(_ context.Context, _ string, _ string, installationID, selectionID string) (serviceactor.InstallationExtension, error) {
	fake.mu.Lock()
	defer fake.mu.Unlock()
	fake.lastExtensionInstallID = installationID
	fake.lastExtensionSelectionID = selectionID
	fake.lastExtensionOperation = "enable"
	result := fake.installationExtension
	result.Status = serviceactor.StatusActive
	return result, fake.installationExtensionErr
}

func (fake *fakeStore) DisableInstallationExtensionForUser(_ context.Context, _ string, _ string, installationID, selectionID string) (serviceactor.InstallationExtension, error) {
	fake.mu.Lock()
	defer fake.mu.Unlock()
	fake.lastExtensionInstallID = installationID
	fake.lastExtensionSelectionID = selectionID
	fake.lastExtensionOperation = "disable"
	result := fake.installationExtension
	result.Status = serviceactor.StatusDisabled
	result.DisabledReason = "disabled_by_manager"
	return result, fake.installationExtensionErr
}
