resource "kubernetes_secret" "geoip_maxmind_credentials" {
  metadata {
    name      = "geoip-maxmind-credentials"
    namespace = kubernetes_namespace.m3uproxy.metadata[0].name
  }
  data = {
    account_id  = var.maxmind_account_id
    license_key = var.maxmind_license_key
  }
  type = "Opaque"
}

resource "kubernetes_cron_job_v1" "geoip_update" {

  metadata {
    name      = "geoip-update"
    namespace = kubernetes_namespace.m3uproxy.metadata[0].name
  }

  spec {
    schedule = local.geoip_cron_schedule
    job_template {
      metadata {
        name = "geoip-update"
      }
      spec {
        template {
          metadata {
            labels = {
              app = "geoip-update"
            }
          }
          spec {
            container {
              name  = "geoip-update"
              image = "${local.geoip_image}:${local.geoip_version}"

              env {
                name = "GEOIPUPDATE_ACCOUNT_ID"
                value_from {
                  secret_key_ref {
                    name = kubernetes_secret.geoip_maxmind_credentials.metadata[0].name
                    key  = "account_id"
                  }
                }
              }

              env {
                name = "GEOIPUPDATE_LICENSE_KEY"
                value_from {
                  secret_key_ref {
                    name = kubernetes_secret.geoip_maxmind_credentials.metadata[0].name
                    key  = "license_key"
                  }
                }
              }

              env {
                name  = "GEOIPUPDATE_EDITION_IDS"
                value = join(" ", local.geoip_editions)
              }

              resources {
                requests = {
                  memory = "64Mi"
                }
              }

              volume_mount {
                name       = "geoip-db"
                mount_path = "/usr/share/GeoIP"
              }


              security_context {
                run_as_user  = 1000
                run_as_group = 1000
              }
            }

            service_account_name = kubernetes_service_account.m3uproxy_service_account.metadata[0].name

            restart_policy = "OnFailure"

            volume {
              name = "geoip-db"
              host_path {
                path = local.geoip_path
              }
            }
          }
        }
      }
    }
  }
}

