#!/bin/bash
# awsses.sh - Konfiguriert Amazon SES für eine Domain und erstellt eine Receipt Rule

# Überprüfen, ob die Domain-Variable gesetzt ist
if [ -z "$DOMAIN_NAME" ]; then
  echo "Fehler: DOMAIN_NAME ist nicht gesetzt."
  echo "Bitte setzen Sie die Variable mit: export DOMAIN_NAME='IhreDomain.de'"
  exit 1
fi

# Überprüfen, ob S3_BUCKET_NAME gesetzt ist
if [ -z "$S3_BUCKET_NAME" ]; then
  echo "Warnung: S3_BUCKET_NAME ist nicht gesetzt."
  echo "Wird automatisch aus DOMAIN_NAME generiert, verwenden Sie idealerweise zuerst awss3.sh."
  S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}')
  echo "Generierter Bucket-Name: $S3_BUCKET_NAME"
fi

# Konfiguration
AWS_REGION=${AWS_REGION:-"us-east-2"}
EMAIL_PREFIX=${EMAIL_PREFIX:-""}
RULE_NAME="store-$(echo "$DOMAIN_NAME" | tr '.' '-')-to-s3"

echo "=== SES Konfiguration für $DOMAIN_NAME ==="
echo "Region: $AWS_REGION"
echo "S3 Bucket: $S3_BUCKET_NAME"
echo "Receipt Rule Name: $RULE_NAME"

# ------------------------  
# SES Domain-Identität erstellen
# ------------------------
echo "SES Domain-Identität erstellen..."
IDENTITY_RESULT=$(aws sesv2 create-email-identity \
  --email-identity ${DOMAIN_NAME} \
  --region ${AWS_REGION})

echo "Identity erstellt. Überprüfen Sie die DNS-Einträge für die Domain-Verifizierung."
echo "$IDENTITY_RESULT" | jq .

# DKIM-Signierung aktivieren
echo "DKIM-Signierung aktivieren..."
aws sesv2 put-email-identity-dkim-attributes \
  --email-identity ${DOMAIN_NAME} \
  --signing-enabled \
  --region ${AWS_REGION}

# Mail-From-Domain konfigurieren
echo "Mail-From-Domain konfigurieren..."
aws sesv2 put-email-identity-mail-from-attributes \
  --email-identity ${DOMAIN_NAME} \
  --mail-from-domain "mail.${DOMAIN_NAME}" \
  --behavior-on-mx-failure USE_DEFAULT_VALUE \
  --region ${AWS_REGION}

# Überprüfen, ob der Rule Set existiert, sonst erstellen
echo "Überprüfe oder erstelle Receipt Rule Set..."
RULESET_EXISTS=$(aws ses describe-receipt-rule-sets --region ${AWS_REGION} | jq -r '.RuleSets[] | select(.Name == "bizmatch-ruleset") | .Name')

if [ -z "$RULESET_EXISTS" ]; then
  echo "Receipt Rule Set 'bizmatch-ruleset' existiert nicht, wird erstellt..."
  aws ses create-receipt-rule-set --rule-set-name "bizmatch-ruleset" --region ${AWS_REGION}
else
  echo "Receipt Rule Set 'bizmatch-ruleset' existiert bereits."
fi

# Receipt Rule erstellen
echo "Receipt Rule für E-Mail-Empfang erstellen..."
aws ses create-receipt-rule --rule-set-name "bizmatch-ruleset" --rule '{
  "Name": "'"${RULE_NAME}"'",
  "Enabled": true,
  "ScanEnabled": true,
  "Actions": [{
    "S3Action": {
      "BucketName": "'"${S3_BUCKET_NAME}"'",
      "ObjectKeyPrefix": "'"${EMAIL_PREFIX}"'"
    }
  }],
  "TlsPolicy": "Require",
  "Recipients": ["'"${DOMAIN_NAME}"'"]
}' --region ${AWS_REGION}

# Prüfen, ob der Rule Set aktiv ist
ACTIVE_RULESET=$(aws ses describe-active-receipt-rule-set --region ${AWS_REGION} | jq -r '.Metadata.Name')

if [ "$ACTIVE_RULESET" != "bizmatch-ruleset" ]; then
  echo "Aktiviere Rule Set 'bizmatch-ruleset'..."
  aws ses set-active-receipt-rule-set --rule-set-name "bizmatch-ruleset" --region ${AWS_REGION}
else
  echo "Rule Set 'bizmatch-ruleset' ist bereits aktiv."
fi

echo "SES-Konfiguration für $DOMAIN_NAME abgeschlossen."
echo
echo "WICHTIG: Überprüfen Sie die Ausgabe oben für DNS-Einträge, die Sie bei Ihrem DNS-Provider setzen müssen:"
echo "1. DKIM-Einträge (3 CNAME-Einträge)"
echo "2. MAIL FROM MX und TXT-Einträge"
echo "3. SPF-Eintrag (TXT): v=spf1 include:amazonses.com ~all"
echo
echo "Nach dem Setzen der DNS-Einträge kann es bis zu 72 Stunden dauern, bis die Verifizierung abgeschlossen ist."