package compose

import (
	"alpha.dagger.io/dagger"
	"alpha.dagger.io/docker"
	"alpha.dagger.io/random"
)

repo: dagger.#Artifact @dagger(input)

TestSSH: {
	key:  dagger.#Secret @dagger(input)
	host: string         @dagger(input)
	user: string         @dagger(input)
}

TestCompose: {
	// Generate a random string.
	// Seed is used to force buildkit execution and not simply use a previous generated string.
	suffix: random.#String & {seed: "cmp"}

	name: "compose_test_\(suffix.out)"

	up: #App & {
		ssh: {
			key:  TestSSH.key
			host: TestSSH.host
			user: TestSSH.user
		}
		source: repo
		"name": name
	}

	verify: docker.#Command & {
		ssh:     up.run.ssh
		command: #"""
				docker container ls | grep "\#(name)_api" | grep "Up"
			"""#
	}

	cleanup: #CleanupCompose & {
		context: up.run
		"name":  name
		ssh:     verify.ssh
	}
}

TestInlineCompose: {
	// Generate a random string.
	// Seed is used to force buildkit execution and not simply use a previous generated string.
	suffix: random.#String & {seed: "cmp-inline"}

	name: "inline_test_\(suffix.out)"

	up: #App & {
		ssh: {
			key:  TestSSH.key
			host: TestSSH.host
			user: TestSSH.user
		}
		source: repo
		"name": name
		composeFile: #"""
			version: "3"

			services:
			  api-mix:
			    build: .
			    environment:
			      PORT: 7000
			    ports:
			    - 7000
			"""#
	}

	verify: docker.#Command & {
		ssh:     up.run.ssh
		command: #"""
				docker container ls | grep "\#(name)_api-mix" | grep "Up"
			"""#
	}

	cleanup: #CleanupCompose & {
		context: up.run
		"name":  name
		ssh:     verify.ssh
	}
}