data "aws_iam_policy_document" "ecs_assume_role" {
  statement {
    sid     = "AllowAssumeRoleFromECSTasks"
    effect  = "Allow"
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["ecs-tasks.amazonaws.com"]
    }
  }
}

data "aws_iam_policy_document" "entitlement_management_task_role_doc" {

  statement {
    sid = "PutRecords"
    effect = "Allow"
    actions = [
      "kinesis:PutRecords"
    ]
    resources = [ aws_kinesis_stream.meteringstream.arn ]
  }

  statement {
    sid = "clientSyncSecretsSecretsAccess"
    effect = "Allow"
    actions = [
      "ssm:get*"
    ]
    resources = [
      "arn:aws:ssm:us-east-1:721086286010:parameter/*"
    ]
  }

  statement {
    sid = "entitlementManagementECSTaskExecution"
    effect = "Allow"
    actions = [
      "ecr:GetAuthorizationToken",
      "ecr:BatchCheckLayerAvailability",
      "ecr:GetDownloadUrlForLayer",
      "ecr:BatchGetImage",
      "logs:CreateLogStream",
      "logs:PutLogEvents"
    ]
    resources = ["*"]
  }
}

resource "aws_iam_policy" "entitlement_management_task_policy" {
  name = "${var.service_name}_policy"
  policy = "${data.aws_iam_policy_document.entitlement_management_task_role_doc.json}"
}

resource "aws_iam_role" "entitlement_management_task_role" {
  name = "${var.service_name}-task-role"
  assume_role_policy = "${data.aws_iam_policy_document.ecs_assume_role.json}"
}

resource "aws_iam_role_policy_attachment" "entitlement_management_task_role_policy_attach" {
  role = "${aws_iam_role.entitlement_management_task_role.name}"
  policy_arn = "${aws_iam_policy.entitlement_management_task_policy.arn}"
}


resource "aws_iam_role_policy_attachment" "profile_internal_policy_attach" {
  role = "${aws_iam_role.entitlement_management_task_role.name}"
  policy_arn = "${data.aws_iam_policy.profile_internal_policy.arn}"
}

# resource "aws_iam_policy" "internal_profile_policy_copy" {
#   name = "${var.service_name}-profile-internal"
#   policy = "${data.terraform_remote_state.mop_core.tf_profile_internal_policy_document}"
# }

#

##
### if Sandbox then create a user with the same policies for localhost MOP
##
#

# create an IAM user for the localhost service
resource "aws_iam_user" "entitlement_management_service" {
  name = "entitlement_management_service"
  count = "${local.deploy_env_name == "sandbox" ? 1 : 0}"
}
# this credential lives in sandbox-credentials
resource "aws_iam_access_key" "entitlement_management_service" {
  user = "${aws_iam_user.entitlement_management_service[0].name}"
  count = "${local.deploy_env_name == "sandbox" ? 1 : 0}"
}

# attach the same policies held by the task role
resource "aws_iam_user_policy_attachment" "profile_internal_entitlement_management" {
  user       = "${aws_iam_user.entitlement_management_service[0].name}"
  policy_arn = "${data.aws_iam_policy.profile_internal_policy.arn}"
  count = "${local.deploy_env_name == "sandbox" ? 1 : 0}"
}
resource "aws_iam_user_policy_attachment" "task_role_entitlement_management" {
  user       = "${aws_iam_user.entitlement_management_service[0].name}"
  policy_arn = "${aws_iam_policy.entitlement_management_task_policy.arn}"
  count = "${local.deploy_env_name == "sandbox" ? 1 : 0}"
}
