resource "aws_athena_database" "access_logs_db" {
  name   = local.logs_athena_db
  bucket = module.athena_results_s3_bucket.bucket.id
}

resource "aws_glue_catalog_database" "access_logs_db" {
  name = replace(data.aws_s3_bucket.security_logs.id, "-", "_")

  create_table_default_permission {
    permissions = ["SELECT"]

    principal {
      data_lake_principal_identifier = "IAM_ALLOWED_PRINCIPALS"
    }
  }
}

resource "aws_glue_catalog_table" "uat_images_api_logs" {
  name          = lower("uat_${var.platform["name"]}_images_api_logs")
  database_name = aws_athena_database.access_logs_db.name
  owner         = "hadoop"
  parameters = {
    "EXTERNAL"               = "TRUE"
    "skip.header.line.count" = "2"
    "transient_lastDdlTime"  = "1659689721"
  }

  table_type = "EXTERNAL_TABLE"

  storage_descriptor {
    bucket_columns            = []
    compressed                = false
    input_format              = "org.apache.hadoop.mapred.TextInputFormat"
    location                  = "s3://${data.aws_s3_bucket.security_logs.bucket}/cf/uat-core-images-api"
    number_of_buckets         = -1
    output_format             = "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
    parameters                = {}
    stored_as_sub_directories = false

    columns {
      name       = "date"
      parameters = {}
      type       = "date"
    }
    columns {
      name       = "time"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "location"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "bytes"
      parameters = {}
      type       = "bigint"
    }
    columns {
      name       = "request_ip"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "method"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "host"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "uri"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "status"
      parameters = {}
      type       = "int"
    }
    columns {
      name       = "referrer"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "user_agent"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "query_string"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "cookie"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "result_type"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "request_id"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "host_header"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "request_protocol"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "request_bytes"
      parameters = {}
      type       = "bigint"
    }
    columns {
      name       = "time_taken"
      parameters = {}
      type       = "float"
    }
    columns {
      name       = "xforwarded_for"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "ssl_protocol"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "ssl_cipher"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "response_result_type"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "http_version"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "fle_status"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "fle_encrypted_fields"
      parameters = {}
      type       = "int"
    }
    columns {
      name       = "c_port"
      parameters = {}
      type       = "int"
    }
    columns {
      name       = "time_to_first_byte"
      parameters = {}
      type       = "float"
    }
    columns {
      name       = "x_edge_detailed_result_type"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "sc_content_type"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "sc_content_len"
      parameters = {}
      type       = "bigint"
    }
    columns {
      name       = "sc_range_start"
      parameters = {}
      type       = "bigint"
    }
    columns {
      name       = "sc_range_end"
      parameters = {}
      type       = "bigint"
    }

    ser_de_info {
      parameters = {
        "field.delim"          = "\t"
        "serialization.format" = "\t"
      }
      serialization_library = "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe"
    }
  }
}

resource "aws_glue_catalog_table" "prod_images_api_logs" {
  name          = lower("${var.platform["prefix"]}_${var.platform["name"]}_images_api_logs")
  database_name = aws_athena_database.access_logs_db.name
  owner         = "hadoop"
  parameters = {
    "EXTERNAL"               = "TRUE"
    "skip.header.line.count" = "2"
    "transient_lastDdlTime"  = "1659689721"
  }

  table_type = "EXTERNAL_TABLE"

  storage_descriptor {
    bucket_columns            = []
    compressed                = false
    input_format              = "org.apache.hadoop.mapred.TextInputFormat"
    location                  = "s3://${data.aws_s3_bucket.security_logs.bucket}/cf/${local.name_prefix}-images-api"
    number_of_buckets         = -1
    output_format             = "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
    parameters                = {}
    stored_as_sub_directories = false

    columns {
      name       = "date"
      parameters = {}
      type       = "date"
    }
    columns {
      name       = "time"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "location"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "bytes"
      parameters = {}
      type       = "bigint"
    }
    columns {
      name       = "request_ip"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "method"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "host"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "uri"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "status"
      parameters = {}
      type       = "int"
    }
    columns {
      name       = "referrer"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "user_agent"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "query_string"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "cookie"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "result_type"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "request_id"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "host_header"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "request_protocol"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "request_bytes"
      parameters = {}
      type       = "bigint"
    }
    columns {
      name       = "time_taken"
      parameters = {}
      type       = "float"
    }
    columns {
      name       = "xforwarded_for"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "ssl_protocol"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "ssl_cipher"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "response_result_type"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "http_version"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "fle_status"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "fle_encrypted_fields"
      parameters = {}
      type       = "int"
    }
    columns {
      name       = "c_port"
      parameters = {}
      type       = "int"
    }
    columns {
      name       = "time_to_first_byte"
      parameters = {}
      type       = "float"
    }
    columns {
      name       = "x_edge_detailed_result_type"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "sc_content_type"
      parameters = {}
      type       = "string"
    }
    columns {
      name       = "sc_content_len"
      parameters = {}
      type       = "bigint"
    }
    columns {
      name       = "sc_range_start"
      parameters = {}
      type       = "bigint"
    }
    columns {
      name       = "sc_range_end"
      parameters = {}
      type       = "bigint"
    }

    ser_de_info {
      parameters = {
        "field.delim"          = "\t"
        "serialization.format" = "\t"
      }
      serialization_library = "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe"
    }
  }
}
