#!/usr/bin/env bash
# Apply Campaign page layout to NexusCRM
# Run this script when the backend is running.
#
# Usage:
#   ./scripts/apply_campaign_layout.sh
#   API_BASE_URL=http://127.0.0.1:43001 FRONTEND_URL=http://127.0.0.1:4173 ./scripts/apply_campaign_layout.sh

set -euo pipefail

PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
source "${PROJECT_ROOT}/scripts/runtime-env.sh"
nexus_export_runtime_env "${PROJECT_ROOT}"

BASE_URL="${BASE_URL:-${API_BASE_URL}}"
FRONTEND_ORIGIN="${FRONTEND_ORIGIN:-${FRONTEND_URL}}"
EMAIL="${EMAIL:-admin@test.com}"
PASSWORD="${PASSWORD:-${NEXUS_ADMIN_PASSWORD:-}}"
if [ -z "${PASSWORD:-}" ]; then
  echo "❌ PASSWORD or NEXUS_ADMIN_PASSWORD env var is required. Export it before running this script." >&2
  exit 1
fi

echo "🔐 Authenticating..."
TOKEN=$(curl -s -X POST "${BASE_URL}/services/oauth2/token" \
  --data-urlencode "grant_type=password" \
  --data-urlencode "username=${EMAIL}" \
  --data-urlencode "password=${PASSWORD}" | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")

if [ -z "$TOKEN" ]; then
  echo "❌ Authentication failed"
  exit 1
fi
echo "✅ Authenticated"

echo "📐 Posting Campaign layout..."
RESPONSE=$(curl -s -X POST "${BASE_URL}/services/data/v63.0/ui-api/layout/Global" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -H "Origin: ${FRONTEND_ORIGIN}" \
  -d '{
  "id": "Campaign_layout_default",
  "objectApiName": "Campaign",
  "layoutName": "Default Layout",
  "type": "Detail",
  "isDefault": true,
  "compactLayout": ["Name", "ParentId", "Type", "Status", "StartDate"],
  "sections": [
    {
      "id": "campaign_section_info",
      "label": "Information",
      "columns": 2,
      "fields": [
        "Name",        "OwnerId",
        "IsActive",    "Status",
        "ParentId",    "StartDate",
        "Type",        "EndDate",
        "CurrencyIsoCode", "Region__c",
        "FunnelStage__c",  "Exclude_from_Attribution__c"
      ]
    },
    {
      "id": "campaign_section_description",
      "label": "",
      "columns": 1,
      "fields": [
        "Description"
      ]
    },
    {
      "id": "campaign_section_planning",
      "label": "PLANNING",
      "columns": 2,
      "fields": [
        "NumberSent",       "BudgetedCost",
        "ExpectedResponse", "ActualCost",
        "",                 "ExpectedRevenue"
      ]
    },
    {
      "id": "campaign_section_statistics",
      "label": "CAMPAIGN STATISTICS",
      "columns": 2,
      "fields": [
        "NumberOfResponses",       "NumberOfOpportunities",
        "NumberOfLeads",           "NumberOfWonOpportunities",
        "NumberOfConvertedLeads",  "AmountAllOpportunities",
        "NumberOfContacts",        "AmountWonOpportunities"
      ]
    },
    {
      "id": "campaign_section_custom_links",
      "label": "CUSTOM LINKS",
      "columns": 1,
      "fields": []
    }
  ],
  "relatedLists": [
    {
      "id": "CampaignMember-CampaignId",
      "label": "Campaign Members",
      "objectApiName": "campaignmember",
      "lookupField": "CampaignId",
      "fields": ["Name", "Type", "Status", "OwnerId", "CompanyOrAccount"]
    },
    {
      "id": "CampaignMemberStatus-CampaignId",
      "label": "Campaign Member Statuses",
      "objectApiName": "campaignmemberstatus",
      "lookupField": "CampaignId",
      "fields": ["Label", "IsDefault", "HasResponded"]
    },
    {
      "id": "Campaign-ParentId",
      "label": "Campaign Hierarchy",
      "objectApiName": "campaign",
      "lookupField": "ParentId",
      "fields": ["Name", "Status", "StartDate"]
    }
  ],
  "headerActions": [
    {
      "name": "Edit",
      "label": "Edit",
      "type": "Standard"
    },
    {
      "name": "Delete",
      "label": "Delete",
      "type": "Standard"
    },
    {
      "name": "Share",
      "label": "Share",
      "type": "Standard"
    }
  ],
  "quickActions": []
}')

echo "$RESPONSE" | python3 -c "
import sys, json
r = json.load(sys.stdin)
if 'id' in r or 'objectApiName' in r:
    print('✅ Campaign layout saved:', r.get('id', r.get('objectApiName', 'OK')))
else:
    print('❌ Unexpected response:', json.dumps(r, indent=2))
    sys.exit(1)
" 2>/dev/null || echo "$RESPONSE"

echo "Done."
