terraform {
  required_providers {
    digitalocean = {
      source  = "digitalocean/digitalocean"
      version = "2.32.0"
    }
    time = {
      source = "hashicorp/time"
      version = "~> 0.9.0"
    }
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 4.0"
    }
  }
}

provider "digitalocean" {
  token = var.do_token
}

provider "cloudflare" {
  api_token = var.cloudflare_api_key
}

module "digitalocean_ssh_key" {
  source = "./modules/digitalocean_ssh_key"
  
  app_name = var.app_name
  ssh_key = var.ssh_key
  do_token = var.do_token
}

module "droplets" {
  source = "./modules/droplets"

  app_name = var.app_name
  ssh_fingerprint = module.digitalocean_ssh_key.ssh_key_fingerprint
  do_token = var.do_token
}

module "floating_ips" {
  source = "./modules/floating_ips"

  do_region = var.do_region
  do_token = var.do_token
  droplet_details = module.droplets.droplet_details
}

module "cloudflare_domain" {
  source = "./modules/cloudflare_domain"
  
  domains    = var.domains
  target_ip  = module.floating_ips.floating_ip_details["manager1"].floating_ip
  account_id = var.cloudflare_account_id
  app_name   = var.app_name

  depends_on = [module.floating_ips]
}

module "ansible_setup" {
  source = "./modules/ansible_setup"
  
  do_token = var.do_token
  floating_ip_details = module.floating_ips.floating_ip_details
  ssh_private_key_path = var.ssh_key
  lb_ip = module.floating_ips.floating_ip_details["manager1"].floating_ip
}

module "ssh_automate" {
  source = "./modules/ssh_automate"
  
  do_token = var.do_token
  floating_ip_details = module.floating_ips.floating_ip_details
  ssh_private_key_path = module.ansible_setup.ssh_private_key_path
}

module "update_config" {
  source = "./modules/update_config"
  
  floating_ip = module.floating_ips.floating_ip_details["manager1"].floating_ip

  depends_on = [module.floating_ips]
}

# module "vault_secrets" {
#   source = "./modules/vault_secrets"

#   bucket_details = module.spaces.bucket_details
#   droplet_ip = module.floating_ips.floating_ip_details["manager1"].floating_ip
#   ssh_private_key_path = var.ssh_key
#   repo_access_token = var.repo_access_token
#   spaces_access_id = var.spaces_access_id
#   spaces_secret_key = var.spaces_secret_key
#   spaces_region = var.space_region
#   app_name = var.app_name
#   domains = var.domains
#   github_username = var.github_username
#   app_support_email = var.app_support_email
#   mailer_from_address = var.mailer_from_address
#   mailer_from_name = var.mailer_from_name
#   postmark_api_key = var.postmark_api_key
#   dockerhub_username = var.dockerhub_username
#   dockerhub_password = var.dockerhub_password
#   mongodb_host = var.mongodb_host
#   mongodb_database = var.mongodb_database
#   mongodb_user = var.mongodb_user
#   mongodb_password = var.mongodb_password
#   app_domain = var.app_domain
# }

