package repository

import (
	"context"
	"github.com/ocdp/cluster-service/internal/domain/entity"
)

// OCIClient OCI Registry 客户端接口（Output Port）
type OCIClient interface {
	// ListRepositories 列出 Registry 中的 repositories.
	// artifactType 支持 "chart" 和 "all"，默认由调用方决定。
	ListRepositories(ctx context.Context, registry *entity.Registry, artifactType string) ([]string, error)

	// ListArtifacts 列出指定 repository 的所有 artifacts
	// mediaTypeFilter: "all", "image", "chart", "other" - 使用模糊匹配过滤
	ListArtifacts(ctx context.Context, registry *entity.Registry, repository, mediaTypeFilter string) ([]*entity.Artifact, error)

	// GetArtifact 获取指定 artifact 的详细信息
	GetArtifact(ctx context.Context, registry *entity.Registry, repository, reference string) (*entity.Artifact, error)

	// GetValuesSchema 获取 Helm Chart 的 values schema
	GetValuesSchema(ctx context.Context, registry *entity.Registry, repository, reference string) (string, error)

	// GetValuesYAML 获取 Helm Chart 原始 values.yaml
	GetValuesYAML(ctx context.Context, registry *entity.Registry, repository, reference string) (string, error)

	// PullArtifact 下载 artifact 到本地
	PullArtifact(ctx context.Context, registry *entity.Registry, repository, reference, destPath string) error

	// PushArtifact 推送 artifact 到 Registry
	PushArtifact(ctx context.Context, registry *entity.Registry, repository, tag, sourcePath string) error

	// CheckHealth 检查 Registry 健康状态
	CheckHealth(ctx context.Context, registry *entity.Registry) error
}
