[
  {
    "type": "modify_column",
    "description": "Add 'inbound' to smsCategory enum in billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'smsCategory' AND COLUMN_TYPE LIKE '%inbound%'",
    "sql": "ALTER TABLE `billingSmsUsage` MODIFY COLUMN `smsCategory` enum('buy_completion','service_completion','survey','chat_transactional','chat_interactive','marketing','custom','inbound') NOT NULL"
  },
  {
    "type": "add_column",
    "description": "Add providerCostUsd column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'providerCostUsd'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `providerCostUsd` DECIMAL(10,6) DEFAULT NULL COMMENT 'Actual cost charged by provider in USD'"
  },
  {
    "type": "add_column",
    "description": "Add costStatus column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'costStatus'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `costStatus` enum('pending','captured','unknown') NOT NULL DEFAULT 'pending' COMMENT 'Cost capture state'"
  },
  {
    "type": "add_column",
    "description": "Add costCapturedAt column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'costCapturedAt'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `costCapturedAt` datetime DEFAULT NULL COMMENT 'When cost was successfully captured'"
  },
  {
    "type": "add_column",
    "description": "Add costRetryCount column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'costRetryCount'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `costRetryCount` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'Number of cost lookup retries attempted'"
  },
  {
    "type": "add_column",
    "description": "Add deliveryStatus column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'deliveryStatus'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `deliveryStatus` enum('pending','sent','delivered','failed') NOT NULL DEFAULT 'pending' COMMENT 'Mapped 3-state delivery status for reporting'"
  },
  {
    "type": "add_column",
    "description": "Add providerRawStatus column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'providerRawStatus'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `providerRawStatus` varchar(50) DEFAULT NULL COMMENT 'Original status string from provider webhook'"
  },
  {
    "type": "add_column",
    "description": "Add deliveryUpdatedAt column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'deliveryUpdatedAt'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `deliveryUpdatedAt` datetime DEFAULT NULL COMMENT 'When delivery status was last updated from webhook'"
  },
  {
    "type": "add_column",
    "description": "Add deliveryErrorCode column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'deliveryErrorCode'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `deliveryErrorCode` varchar(20) DEFAULT NULL COMMENT 'Provider error code on failure'"
  },
  {
    "type": "add_column",
    "description": "Add deliveryErrorMessage column to billingSmsUsage",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND COLUMN_NAME = 'deliveryErrorMessage'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD COLUMN `deliveryErrorMessage` varchar(500) DEFAULT NULL COMMENT 'Human-readable error description'"
  },
  {
    "type": "add_index",
    "description": "Add index for cost pending lookups",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND INDEX_NAME = 'idx_cost_pending'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD INDEX `idx_cost_pending` (`costStatus`, `createdAt`)"
  },
  {
    "type": "add_index",
    "description": "Add index for delivery status queries",
    "database": "kiosk_buykiosk",
    "check_query": "SELECT INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'kiosk_buykiosk' AND TABLE_NAME = 'billingSmsUsage' AND INDEX_NAME = 'idx_delivery_status'",
    "sql": "ALTER TABLE `billingSmsUsage` ADD INDEX `idx_delivery_status` (`typeNum`, `deliveryStatus`, `sentAt`)"
  }
]
