package automation

import (
	"context"

	"github.com/tidbcloud/AgentTeam/internal/agsbridge/wiki"
	"github.com/tidbcloud/AgentTeam/internal/service/resource/repos"
)

type fakeAGSRepositoryStore struct {
	ensureRequests []repos.AGSRepositoryEnsureRequest
	repository     repos.RepositoryIdentity
	ensureErr      error
	ensureErrAfter int
	writes         []wiki.KBWikiPageWrite
	prunes         []wiki.KBWikiPrune
	reconciled     bool
}

func (s *fakeAGSRepositoryStore) RepositoryExists(_ context.Context, _ repos.RepositoryIdentity) (bool, error) {
	return false, nil
}

func (s *fakeAGSRepositoryStore) EnsureRepository(_ context.Context, request repos.AGSRepositoryEnsureRequest) (repos.RepositoryIdentity, error) {
	s.ensureRequests = append(s.ensureRequests, request)
	if s.ensureErr != nil && (s.ensureErrAfter <= 0 || len(s.ensureRequests) > s.ensureErrAfter) {
		return repos.RepositoryIdentity{}, s.ensureErr
	}
	if s.repository.FullName != "" {
		return s.repository, nil
	}
	return repos.RepositoryIdentity{Owner: request.Owner, Name: request.Name, FullName: request.Owner + "/" + request.Name, DefaultBranch: request.DefaultBranch}, nil
}

func (s *fakeAGSRepositoryStore) PutPage(_ context.Context, request wiki.KBWikiPageWrite) error {
	s.writes = append(s.writes, request)
	return nil
}

func (s *fakeAGSRepositoryStore) PrunePages(_ context.Context, request wiki.KBWikiPrune) error {
	s.prunes = append(s.prunes, request)
	return nil
}

func (s *fakeAGSRepositoryStore) Reconcile(_ context.Context, repository repos.RepositoryIdentity) (wiki.KBWikiReconcileResult, error) {
	s.reconciled = true
	return wiki.KBWikiReconcileResult{RepositoryID: repository.ID, IndexedCommitSHA: "abc123", PageCount: len(s.writes), Reconciled: true}, nil
}
