package converter

import (
	"github.com/tidbcloud/AgentTeam/internal/api/dto"
	"github.com/tidbcloud/AgentTeam/internal/store/app"
	"github.com/tidbcloud/AgentTeam/internal/store/provider"
)

func ToProviderAppConnectionResponse(v provider.AppConnectionView) dto.ProviderAppConnectionResponse {
	return dto.ProviderAppConnectionResponse{
		ID:                 v.ID,
		ExternalSubjectRef: v.ExternalSubjectRef,
		DisplayLabel:       v.DisplayLabel,
		RequiresUpgrade:    v.RequiresUpgrade,
		MissingPermissions: v.MissingPermissions,
		MissingEvents:      v.MissingEvents,
		Enabled:            v.Enabled,
		CreatedAt:          v.CreatedAt,
		UpdatedAt:          v.UpdatedAt,
	}
}

func ToProviderAppConnectionResponses(items []provider.AppConnectionView) []dto.ProviderAppConnectionResponse {
	if items == nil {
		return nil
	}
	out := make([]dto.ProviderAppConnectionResponse, 0, len(items))
	for _, item := range items {
		out = append(out, ToProviderAppConnectionResponse(item))
	}
	return out
}

func ToProviderAppInstallationResponse(v provider.AppInstallationView) dto.ProviderAppInstallationResponse {
	return dto.ProviderAppInstallationResponse{
		ID:          v.ID,
		AppID:       v.AppID,
		AppSlug:     v.AppSlug,
		AppName:     v.AppName,
		AvatarURL:   v.AvatarURL,
		MemberID:    v.MemberID,
		Handle:      v.Handle,
		Connections: ToProviderAppConnectionResponses(v.Connections),
		Enabled:     v.Enabled,
		CreatedAt:   v.CreatedAt,
		UpdatedAt:   v.UpdatedAt,
	}
}

func ToGiteaAppConfigResponse(v provider.GiteaAppConfigView) dto.GiteaAppConfigResponse {
	return dto.GiteaAppConfigResponse{
		Registered:  v.Registered,
		InstanceURL: v.InstanceURL,
		DisplayName: v.DisplayName,
	}
}

func ToGitHubAppConfigResponse(v provider.GitHubAppConfigView) dto.GitHubAppConfigResponse {
	return dto.GitHubAppConfigResponse{
		Registered: v.Registered,
		AppID:      v.AppID,
		AppName:    v.AppName,
		AppSlug:    v.AppSlug,
		HTMLURL:    v.HTMLURL,
		OwnerLogin: v.OwnerLogin,
	}
}

func ToGitHubSetupProposalResponse(v app.GitHubSetupProposalView) dto.GitHubSetupProposalResponse {
	return dto.GitHubSetupProposalResponse{
		ID:         v.ID,
		Ready:      v.Ready,
		AppID:      v.AppID,
		AppSlug:    v.AppSlug,
		AppName:    v.AppName,
		OwnerLogin: v.OwnerLogin,
		ExpiresAt:  v.ExpiresAt,
	}
}
