#!/bin/bash

if [ "$#" -lt 3 ]; then
  echo "Usage: $0 DOCKER_CONTAINER_NAME DB_NAME collection1 [collection2 ...]"
  exit 1
fi

DOCKER_CONTAINER_NAME="$1"
DB_NAME="$2"
shift 2 # Shift arguments to process collections next

UPDATE_FILTER='
{
  $and: [
    {
      $expr: {
        $ne: [
          {
            $type: "$__created_at"
          },
          "long"
        ]
      }
    },
    {
      $expr: {
        $ne: [
          {
            $type: "$__modified_at"
          },
          "long"
        ]
      }
    }
  ]
}
'

UPDATE_COMMAND='[
  {
    "$set": {
      "__created_at": {
        $toLong: {
          $multiply: [
            {
              $toLong: "$__created_at"
            },
            1000000
          ]
        }
      },
      "__modified_at": {
        $toLong: {
          $multiply: [
            {
              $toLong: "$__modified_at"
            },
            1000000
          ]
        }
      }
    }
  }
]'

for collection in "$@"; do
  echo "Updating collection: $collection"

  docker exec -i "$DOCKER_CONTAINER_NAME" mongosh "$DB_NAME" --eval "
    db.getCollection('$collection').updateMany($UPDATE_FILTER, $UPDATE_COMMAND)
  "

  if [ $? -eq 0 ]; then
    echo "Successfully updated collection: $collection"
  else
    >&2 echo "Failed to update collection: $collection" 
  fi
done
