package provider

import (
	"context"
	"fmt"

	reposync "github.com/pingcap/agent-git-service/internal/sync"
	"github.com/pingcap/agent-git-service/internal/sync/provider/ags"
	githubprovider "github.com/pingcap/agent-git-service/internal/sync/provider/github"
)

type Factory struct {
	AGS    *ags.Factory
	GitHub *githubprovider.Factory
}

func (f *Factory) Open(ctx context.Context, endpoint reposync.Endpoint) (reposync.Provider, error) {
	switch endpoint.Provider {
	case "ags":
		if f.AGS == nil {
			return nil, fmt.Errorf("AGS sync provider is not configured")
		}
		return f.AGS.Open(ctx, endpoint)
	case "github":
		if f.GitHub == nil {
			return nil, fmt.Errorf("GitHub sync provider is not configured")
		}
		return f.GitHub.Open(ctx, endpoint)
	default:
		return nil, fmt.Errorf("unsupported repository sync provider %q", endpoint.Provider)
	}
}
