module "default_tags" {
  source             = "git@github.com:theorchard/terraform-default-tags.git//?ref=2.0.0"
  environment        = var.environment
  application_family = var.application_family
  service_name       = var.service_name
  team_name          = var.team_name
}

provider "aws" {
  region = var.region

  default_tags {
    tags = module.default_tags.tags
  }
}

terraform {
  backend "s3" {
    bucket  = "shared-orcd-terraform-state"
    key     = "shared/rds-refresh/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

module "aws_accounts" {
  source = "git@github.com:theorchard/terraform-aws-accounts-map.git//modules/read_accounts_map?ref=3.1.0"
}

data "aws_caller_identity" "current" {}

module "vpc_info" {
  source = "git@github.com:theorchard/terraform-vpc-info.git//?ref=3.2.0"

  environment = var.environment
}

data "aws_iam_policy_document" "assume_source_account_backup_role_policy_document" {
  statement {
    actions = [
      "sts:AssumeRole",
    ]

    resources = [
      for account_id in local.source_account_ids :
      "arn:aws:iam::${account_id}:role/${var.source_account_role_name}"
    ]
  }
}

resource "aws_iam_policy" "assume_source_account_backup_role_policy" {
  name        = "STS-${var.environment}-${var.service_name}-assume-source-account-backup-role-policy"
  description = "STS-${var.environment}-${var.service_name}-assume-source-account-backup-role-policy"
  policy      = data.aws_iam_policy_document.assume_source_account_backup_role_policy_document.json
}

data "aws_iam_policy_document" "assume_target_account_restore_role_policy_document" {
  statement {
    actions = [
      "sts:AssumeRole",
    ]

    resources = [
      for role in local.target_roles : "arn:aws:iam::${role["account_id"]}:role/${role["name"]}"
    ]
  }
}

resource "aws_iam_policy" "assume_target_account_restore_role_policy" {
  name        = "STS-${var.environment}-${var.service_name}-assume-target-account-restore-role-policy"
  description = "STS-${var.environment}-${var.service_name}-assume-target-account-restore-role-policy"
  policy      = data.aws_iam_policy_document.assume_target_account_restore_role_policy_document.json
}

module "refresh_secrets" {
  source   = "git@github.com:theorchard/terraform-secrets-manager.git//?ref=1.5.2"
  for_each = toset(var.secrets_manager_secret_names)

  environment        = var.environment
  service_name       = var.service_name
  secret_name        = each.value
  application_family = var.application_family
}
