output "service_name" {
  value = docker_service.instance.name
}
output "environment_variables" {
  value = docker_service.instance.task_spec[0].container_spec[0].env
}
output "ports" {
  value = docker_service.instance.endpoint_spec[0].ports[*].published_port
}
output "volumes" {
  value = docker_service.instance.task_spec[0].container_spec[0].mounts[*].source
}
output "docker_service" {
  value = docker_service.instance
}
locals {
  first_auth = (var.traefik != null
    ? (
      length(var.traefik.basic-auth-users) > 0
      ?
      "${try(var.traefik.basic-auth-users[0], null)}:${try(nonsensitive(random_password.password[var.traefik.basic-auth-users[0]].result), null)}@"
      : null
    ) : null
  )
}
output "endpoint" {
  value = try(
    "https://${local.first_auth}${var.traefik.domain}",
    "http://${local.first_auth}${docker_service.instance.name}:${docker_service.instance.endpoint_spec[0].ports[0].target_port}",
    "https://${var.traefik.domain}",
    "http://${docker_service.instance.name}:${docker_service.instance.endpoint_spec[0].ports[0].target_port}",
    null
  )
}

output "basic_auth_users" {
  value = var.traefik != null ? {
    for user in var.traefik.basic-auth-users : user => nonsensitive(htpasswd_password.htpasswd[user].bcrypt)
  } : {}
}

output "checksum" {
  value = sha512(jsonencode([
    docker_service.instance.id,
    docker_service.instance.name,
    docker_service.instance.task_spec[0].container_spec[0].image,
    coalesce(docker_service.instance.task_spec[0].container_spec[0].env, {}),
    [for c in module.config : c.checksum],
    var.ports,
    var.mounts,
    var.volumes,
    var.remote_volumes,
    var.networks,
    var.healthcheck,
  ]))
}