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
}

provider "aws" {
  region = var.region

  default_tags {
    tags = module.default_tags.tags
  }
}

# Caller Identity
data "aws_caller_identity" "current" {}

# Terraform backends cannot contain interpolations - of the form ${var.environment}-${var.service_name}-state
terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/ddex-ingester/sfn/terraform.tfstate"
    region  = "us-east-1"
    encrypt = true
  }
}

# State Machines

# Step Function (SFN) root policy document - Definition only
data "aws_iam_policy_document" "sfn_assume_statemachines_role" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type = "Service"
      identifiers = [
        "states.amazonaws.com",
        "lambda.amazonaws.com",
        "events.amazonaws.com",
        "s3.amazonaws.com"
      ]
    }
  }
}

# Step Function (SFN) - SFN Cloudwatch logs permission policy - Definition only
data "aws_iam_policy_document" "ddex_ingester_log_event_policy_document" {
  statement {
    effect = "Allow"
    resources = [
      "arn:aws:logs:${var.region}:${data.aws_caller_identity.current.account_id}:log-group:${var.environment}-${var.service_name}",
      "arn:aws:logs:${var.region}:${data.aws_caller_identity.current.account_id}:log-group:${var.environment}-${var.service_name}:log-stream:*"
    ]

    actions = [
      "logs:CreateLogGroup",
      "logs:CreateLogStream",
      "logs:PutLogEvents"
    ]
  }
}

data "aws_iam_policy_document" "sfn_assume_role_for_events_policy" {
  statement {
    sid = "AllowCWEServiceToAssumeRole"

    actions = [
      "sts:AssumeRole",
    ]

    principals {
      type = "Service"

      identifiers = [
        "lambda.amazonaws.com"
      ]
    }
  }
}

# Xray policy document
data "aws_iam_policy_document" "sfn_ddex_ingester_xray_policy_document" {
  statement {
    effect    = "Allow"
    resources = ["*"]

    actions = [
      "xray:PutTraceSegments",
      "xray:PutTelemetryRecords",
      "xray:GetSamplingRules",
      "xray:GetSamplingTargets"
    ]
  }
}


data "aws_rds_cluster" "ddex_ingster_rds" {
  cluster_identifier = "prod-ddex-ingester"
}

data "aws_s3_bucket" "s3_ddex_ingester_bucket" {
  bucket = "prod-ddex-ingester"
}

data "aws_sfn_state_machine" "sfn_ddex_ingester" {
  name = "prod-ddex-ingester-sfn"
}

data "aws_sfn_state_machine" "sfn_awal_ingester" {
  name = "prod-awal-ingester-sfn"
}

data "aws_sfn_state_machine" "sfn_sme_marketing_ingester" {
  name = "prod-sme-marketing-ingester-sfn"
}

data "aws_lambda_function" "lambda_awal_ingestion_flow_control" {
  function_name = "prod-ddex-ingester-awal-ingestion-flow-control"
}

data "aws_lambda_function" "lambda_copy_assets_to_asheville" {
  function_name = "ddex-ingester-copy-assets-to-asheville-prod"
}

data "aws_lambda_function" "lambda_parse_ddex" {
  function_name = "ddex-ingester-parse-ddex-prod"
}

data "aws_lambda_function" "lambda_parse_sme_marketing" {
  function_name = "ddex-ingester-parse-sme-marketing-prod"
}

data "aws_lambda_function" "lambda_set_carveouts" {
  function_name = "ddex-ingester-set-carveouts-prod"
}

data "aws_lambda_function" "lambda_handle_artwork" {
  function_name = "ddex-ingester-handle-artwork-prod"
}

data "aws_lambda_function" "lambda_set_pricing" {
  function_name = "ddex-ingester-set-pricing-prod"
}

data "aws_lambda_function" "lambda_set_main_release_date" {
  function_name = "ddex-ingester-set-main-release-date-prod"
}

data "aws_lambda_function" "lambda_handle_audio_asset" {
  function_name = "ddex-ingester-handle-audio-asset-prod"
}

data "aws_lambda_function" "lambda_retrieve_orchard_metadata" {
  function_name = "ddex-ingester-retrieve-orchard-metadata-prod"
}

data "aws_lambda_function" "lambda_handle_purged_release" {
  function_name = "ddex-ingester-handle-purged-release-prod"
}

data "aws_lambda_function" "lambda_submit_product" {
  function_name = "ddex-ingester-submit-product-prod"
}

data "aws_lambda_function" "lambda_send_sme_ack" {
  function_name = "ddex-ingester-send-sme-ack-prod"
}

data "aws_lambda_function" "lambda_detect_errors" {
  function_name = "ddex-ingester-detect-errors-prod"
}

data "aws_lambda_function" "lambda_poll_audio_asset_status" {
  function_name = "ddex-ingester-poll-audio-asset-status-prod"
}

data "aws_lambda_function" "lambda_poll_artwork_asset_status" {
  function_name = "ddex-ingester-poll-artwork-asset-status-prod"
}

data "aws_lambda_function" "lambda_report_errors" {
  function_name = "ddex-ingester-report-errors-prod"
}

data "aws_lambda_function" "lambda_lookup_switchboard_deal" {
  function_name = "ddex-ingester-lookup-switchboard-deal-prod"
}

data "aws_lambda_function" "lambda_trigger_state_machine" {
  function_name = "ddex-ingester-trigger-state-machine-prod"
}

data "aws_lambda_function" "lambda_register_delivery_to_ingest" {
  function_name = "ddex-ingester-register-delivery-to-ingest-prod"
}

data "aws_lambda_function" "lambda_set_track_metadata" {
  function_name = "ddex-ingester-set-track-metadata-prod"
}

data "aws_lambda_function" "lambda_process_participants" {
  function_name = "ddex-ingester-process-participants-prod"
}

data "aws_lambda_function" "lambda_set_project" {
  function_name = "ddex-ingester-set-project-prod"
}

data "aws_lambda_function" "lambda_set_product" {
  function_name = "ddex-ingester-set-product-prod"
}

data "aws_lambda_function" "lambda_create_tracks" {
  function_name = "ddex-ingester-create-tracks-prod"
}

data "aws_lambda_function" "lambda_lookup_video_product" {
  function_name = "ddex-ingester-lookup-video-product-prod"
}

data "aws_lambda_function" "lambda_handle_video_asset" {
  function_name = "ddex-ingester-handle-video-asset-prod"
}

data "aws_lambda_function" "lambda_poll_video_asset_status" {
  function_name = "ddex-ingester-poll-video-workflow-status-prod"
}

data "aws_lambda_function" "lambda_set_marketing_blurb" {
  function_name = "ddex-ingester-set-marketing-blurb-prod"
}

data "aws_lambda_function" "lambda_validate_ddex" {
  function_name = "ddex-ingester-validate-ddex-prod"
}

data "aws_lambda_function" "lambda_set_preorder_info" {
  function_name = "ddex-ingester-set-preorder-info-prod"
}

data "aws_lambda_function" "lambda_set_release_correction" {
  function_name = "ddex-ingester-set-release-correction-prod"
}

data "aws_lambda_function" "lambda_set_video_metadata" {
  function_name = "ddex-ingester-set-video-metadata-prod"
}

data "aws_lambda_function" "lambda_create_video" {
  function_name = "ddex-ingester-create-video-prod"
}

data "aws_lambda_function" "lambda_write_catalog_ingestion" {
  function_name = "ddex-ingester-write-catalog-ingestion-prod"
}

data "aws_lambda_function" "lambda_fix_video_resolution" {
  function_name = "ddex-ingester-fix-video-resolution-prod"
}

data "aws_lambda_function" "lambda_set_product_to_complete" {
  function_name = "ddex-ingester-set-product-to-complete-prod"
}

data "aws_lambda_function" "lambda_lookup_orchard_product" {
  function_name = "ddex-ingester-lookup-orchard-product-prod"
}

data "aws_lambda_function" "lambda_import_store_links" {
  function_name = "ddex-ingester-import-store-links-prod"
}

data "aws_lambda_function" "lambda_import_delivery_history" {
  function_name = "ddex-ingester-import-delivery-history-prod"
}

data "aws_lambda_function" "lambda_import_store_links_from_ext_ddex" {
  function_name = "ddex-ingester-import-store-links-ext-ddex-prod"
}

data "aws_lambda_function" "lambda_import_delivery_history_from_ext_ddex" {
  function_name = "ddex-ingester-import-delivery-history-ext-ddex-prod"
}

data "aws_lambda_function" "lambda_set_marketing_highlights" {
  function_name = "ddex-ingester-set-marketing-highlights-prod"
}

data "aws_lambda_function" "lambda_prep_ddex" {
  function_name = "ddex-ingester-prep-ddex-prod"
}

data "aws_lambda_function" "lambda_prep_sme_ddex" {
  function_name = "ddex-ingester-prep-sme-ddex-prod"
}

data "aws_lambda_function" "lambda_validate_product" {
  function_name = "ddex-ingester-validate-product-prod"
}

data "aws_lambda_function" "lambda_create_ingestion_lock" {
  function_name = "ddex-ingester-create-ingestion-lock-prod"
}

data "aws_lambda_function" "lambda_remove_ingestion_lock" {
  function_name = "ddex-ingester-remove-ingestion-lock-prod"
}

data "aws_lambda_function" "lambda_find_or_create_account" {
  function_name = "ddex-ingester-find-or-create-account-prod"
}

data "aws_lambda_function" "lambda_approve_product" {
  function_name = "ddex-ingester-approve-product-prod"
}

data "aws_lambda_function" "lambda_replace_with_placeholder_upc" {
  function_name = "ddex-ingester-replace-with-placeholder-upc-prod"
}

data "aws_lambda_function" "lambda_process_purged_release" {
  function_name = "ddex-ingester-process-purged-release-prod"
}
