package argocd

import (
	"alpha.dagger.io/dagger"
	"alpha.dagger.io/dagger/op"
)

// Get application's status
#Status: {
	// ArgoCD configuration
	config: #Config

	// ArgoCD application
	name: dagger.#Input & {string}

	// ArgoCD CLI output
	outputs: {
		// Application health
		health: dagger.#Output & {string}

		// Application sync state
		sync: dagger.#Output & {string}

		// Namespace
		namespace: dagger.#Output & {string}

		// Server
		server: dagger.#Output & {string}

		// Comma separated list of application URLs
		urls: dagger.#Output & {string}

		// Last operation state message
		state: dagger.#Output & {string}
	}

	outputs: #up: [
		op.#Load & {
			from: #CLI & {
				"config": config
			}
		},

		op.#Exec & {
			args: ["sh", "-c",
				#"""
					argocd app get "$APPLICATION" --output json | jq '{health:.status.health.status,sync:.status.sync.status,namespace:.spec.destination.namespace,server:.spec.destination.server,urls:(.status.summary.externalURLs//[]|join(",")),state:.status.operationState.message}' > /output.json
					"""#,
			]
			env: APPLICATION: name
			always: true
		},

		op.#Export & {
			source: "/output.json"
			format: "json"
		},
	]
}