#!/bin/bash

# Grubtech Item Availability Update - cURL
#
# This example demonstrates how to update menu item availability in Grubtech.
#
# Prerequisites:
# - curl command-line tool
# - jq (for JSON parsing, optional)
# - Valid access token from authentication
#
# Replace the following placeholders:
# - {{AUTH_TOKEN}}: Access token from authentication step
# - {{ITEM_ID}}: The menu item ID to update
# - {{AVAILABLE_STATUS}}: Boolean availability status (true/false)

AUTH_TOKEN="{{AUTH_TOKEN}}"
ITEM_ID="{{ITEM_ID}}"
AVAILABLE_STATUS={{AVAILABLE_STATUS}}  # true or false
BASE_URL="https://api.staging.grubtech.io"

# Update single item availability
update_item_availability() {
    local item_id=$1
    local available=$2
    local reason=$3

    echo "Updating item ${item_id}: available=${available}"

    # Construct payload
    TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
    PAYLOAD=$(cat <<EOF
{
  "itemId": "${item_id}",
  "available": ${available},
  "timestamp": "${TIMESTAMP}",
  "reason": "${reason}"
}
EOF
)

    # Make availability update request
    RESPONSE=$(curl -s -w "\n%{http_code}" -X PUT \
        "${BASE_URL}/v1/items/${item_id}/availability" \
        -H "Authorization: Bearer ${AUTH_TOKEN}" \
        -H "Content-Type: application/json" \
        -d "$PAYLOAD")

    # Extract HTTP status code and body
    HTTP_CODE=$(echo "$RESPONSE" | tail -n 1)
    BODY=$(echo "$RESPONSE" | sed '$d')

    # Check for errors
    if [ "$HTTP_CODE" -ne 200 ]; then
        echo "❌ Availability update failed: HTTP $HTTP_CODE"
        echo "Response: $BODY"
        return 1
    fi

    echo "✅ Item availability updated successfully!"
    echo "$BODY" | jq '.' 2>/dev/null || echo "$BODY"
}

# Update multiple items in bulk
update_bulk_availability() {
    echo "Updating multiple items availability..."

    # Construct bulk payload
    TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
    PAYLOAD=$(cat <<'EOF'
{
  "updates": [
    {
      "itemId": "item-123",
      "available": false,
      "reason": "Out of stock"
    },
    {
      "itemId": "item-456",
      "available": true,
      "reason": "Back in stock"
    },
    {
      "itemId": "item-789",
      "available": true,
      "reason": "In stock"
    }
  ],
  "timestamp": "TIMESTAMP_PLACEHOLDER"
}
EOF
)

    # Replace timestamp placeholder
    PAYLOAD=$(echo "$PAYLOAD" | sed "s/TIMESTAMP_PLACEHOLDER/$TIMESTAMP/")

    # Make bulk availability update request
    RESPONSE=$(curl -s -w "\n%{http_code}" -X PUT \
        "${BASE_URL}/v1/items/availability/bulk" \
        -H "Authorization: Bearer ${AUTH_TOKEN}" \
        -H "Content-Type: application/json" \
        -d "$PAYLOAD")

    # Extract HTTP status code and body
    HTTP_CODE=$(echo "$RESPONSE" | tail -n 1)
    BODY=$(echo "$RESPONSE" | sed '$d')

    # Check for errors
    if [ "$HTTP_CODE" -ne 200 ]; then
        echo "❌ Bulk availability update failed: HTTP $HTTP_CODE"
        echo "Response: $BODY"
        return 1
    fi

    echo "✅ Bulk availability updated successfully!"
    echo "$BODY" | jq '.' 2>/dev/null || echo "$BODY"
}

# Helper functions
mark_out_of_stock() {
    update_item_availability "$1" false "Out of stock"
}

mark_in_stock() {
    update_item_availability "$1" true "Back in stock"
}

# Main execution
main() {
    # Example 1: Single item update
    update_item_availability "$ITEM_ID" "$AVAILABLE_STATUS" "Inventory sync"

    echo ""

    # Example 2: Mark item out of stock
    # mark_out_of_stock "item-123"

    # Example 3: Bulk update
    # update_bulk_availability
}

# Run main function
main
