-- CreateTable
CREATE TABLE `bookings` (
    `id` VARCHAR(191) NOT NULL,
    `bookingCode` VARCHAR(30) NOT NULL,
    `customerId` VARCHAR(191) NOT NULL,
    `categoryId` VARCHAR(191) NOT NULL,
    `tripType` ENUM('ONE_WAY', 'ROUND_TRIP', 'LOCAL', 'AIRPORT', 'MULTI_CITY') NOT NULL,
    `serviceKind` ENUM('PASSENGER', 'GOODS', 'BOTH') NOT NULL,
    `status` ENUM('BOOKING_CREATED', 'BROADCASTING', 'OWNER_ACCEPTED', 'CUSTOMER_CONFIRMATION_PENDING', 'CUSTOMER_ACCEPTED', 'PAYMENT_PENDING', 'PAYMENT_SUCCESS', 'BOOKING_CONFIRMED', 'DRIVER_ASSIGNED', 'DRIVER_EN_ROUTE', 'ARRIVED_AT_PICKUP', 'OTP_VERIFIED', 'TRIP_STARTED', 'TRIP_IN_PROGRESS', 'OUTBOUND_DESTINATION_REACHED', 'RETURN_SCHEDULED', 'RETURN_STARTED', 'RETURN_DESTINATION_REACHED', 'COMPLETION_REQUESTED', 'CUSTOMER_CONFIRMED', 'COMPLETED', 'CANCELLED', 'PAYMENT_FAILED', 'OFFER_EXPIRED', 'OWNER_CANCELLED', 'REASSIGNING', 'REFUND_PENDING', 'REFUNDED', 'DISPUTED', 'PAYOUT_ON_HOLD') NOT NULL DEFAULT 'BOOKING_CREATED',
    `pickupCountry` VARCHAR(100) NOT NULL DEFAULT 'India',
    `pickupState` VARCHAR(100) NULL,
    `pickupCity` VARCHAR(100) NULL,
    `pickupAddress` TEXT NOT NULL,
    `pickupLatitude` DECIMAL(10, 7) NULL,
    `pickupLongitude` DECIMAL(10, 7) NULL,
    `destinationCountry` VARCHAR(100) NOT NULL DEFAULT 'India',
    `destinationState` VARCHAR(100) NULL,
    `destinationCity` VARCHAR(100) NULL,
    `destinationAddress` TEXT NOT NULL,
    `destinationLatitude` DECIMAL(10, 7) NULL,
    `destinationLongitude` DECIMAL(10, 7) NULL,
    `departureAt` DATETIME(3) NOT NULL,
    `returnAt` DATETIME(3) NULL,
    `pickupInstructions` TEXT NULL,
    `goodsDescription` TEXT NULL,
    `requestedSeats` INTEGER NULL,
    `estimatedDistanceKm` DECIMAL(12, 2) NULL,
    `billableDistanceKm` DECIMAL(12, 2) NULL,
    `assignedOwnerId` VARCHAR(191) NULL,
    `assignedVehicleId` VARCHAR(191) NULL,
    `assignedDriverId` VARCHAR(191) NULL,
    `broadcastStartedAt` DATETIME(3) NULL,
    `ownerAcceptedAt` DATETIME(3) NULL,
    `customerAcceptedAt` DATETIME(3) NULL,
    `paymentSucceededAt` DATETIME(3) NULL,
    `confirmedAt` DATETIME(3) NULL,
    `cancelledAt` DATETIME(3) NULL,
    `cancellationReason` TEXT NULL,
    `termsVersion` VARCHAR(50) NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `bookings_bookingCode_key`(`bookingCode`),
    INDEX `bookings_customerId_createdAt_idx`(`customerId`, `createdAt`),
    INDEX `bookings_categoryId_status_idx`(`categoryId`, `status`),
    INDEX `bookings_status_departureAt_idx`(`status`, `departureAt`),
    INDEX `bookings_assignedOwnerId_status_idx`(`assignedOwnerId`, `status`),
    INDEX `bookings_assignedVehicleId_status_idx`(`assignedVehicleId`, `status`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `booking_broadcasts` (
    `id` VARCHAR(191) NOT NULL,
    `bookingId` VARCHAR(191) NOT NULL,
    `ownerId` VARCHAR(191) NOT NULL,
    `vehicleId` VARCHAR(191) NOT NULL,
    `status` ENUM('SENT', 'VIEWED', 'ACCEPTED', 'DECLINED', 'EXPIRED', 'LOST', 'CANCELLED') NOT NULL DEFAULT 'SENT',
    `sentAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `viewedAt` DATETIME(3) NULL,
    `respondedAt` DATETIME(3) NULL,
    `expiresAt` DATETIME(3) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    INDEX `booking_broadcasts_ownerId_status_expiresAt_idx`(`ownerId`, `status`, `expiresAt`),
    INDEX `booking_broadcasts_vehicleId_status_idx`(`vehicleId`, `status`),
    UNIQUE INDEX `booking_broadcasts_bookingId_vehicleId_key`(`bookingId`, `vehicleId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `fare_quotes` (
    `id` VARCHAR(191) NOT NULL,
    `quoteCode` VARCHAR(30) NOT NULL,
    `bookingId` VARCHAR(191) NOT NULL,
    `ownerId` VARCHAR(191) NOT NULL,
    `vehicleId` VARCHAR(191) NOT NULL,
    `currency` VARCHAR(10) NOT NULL DEFAULT 'INR',
    `baseFare` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `perKmRate` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `estimatedKm` DECIMAL(12, 2) NULL,
    `billableKm` DECIMAL(12, 2) NULL,
    `distanceFare` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `driverAllowance` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `nightCharge` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `waitingCharge` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `tollAmount` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `parkingAmount` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `stateTax` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `otherCharges` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `taxAmount` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `totalAmount` DECIMAL(12, 2) NOT NULL,
    `status` ENUM('CREATED', 'SENT', 'ACCEPTED', 'REJECTED', 'EXPIRED', 'CANCELLED') NOT NULL DEFAULT 'CREATED',
    `breakdown` JSON NULL,
    `expiresAt` DATETIME(3) NOT NULL,
    `sentAt` DATETIME(3) NULL,
    `acceptedAt` DATETIME(3) NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `fare_quotes_quoteCode_key`(`quoteCode`),
    INDEX `fare_quotes_bookingId_status_idx`(`bookingId`, `status`),
    INDEX `fare_quotes_ownerId_status_idx`(`ownerId`, `status`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `payments` (
    `id` VARCHAR(191) NOT NULL,
    `paymentCode` VARCHAR(30) NOT NULL,
    `bookingId` VARCHAR(191) NOT NULL,
    `provider` VARCHAR(50) NOT NULL,
    `providerOrderId` VARCHAR(191) NULL,
    `providerPaymentId` VARCHAR(191) NULL,
    `idempotencyKey` VARCHAR(191) NULL,
    `currency` VARCHAR(10) NOT NULL DEFAULT 'INR',
    `amount` DECIMAL(12, 2) NOT NULL,
    `status` ENUM('CREATED', 'PENDING', 'AUTHORIZED', 'SUCCESS', 'FAILED', 'CANCELLED', 'REFUND_PENDING', 'PARTIALLY_REFUNDED', 'REFUNDED') NOT NULL DEFAULT 'CREATED',
    `paidAt` DATETIME(3) NULL,
    `failureReason` TEXT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `payments_paymentCode_key`(`paymentCode`),
    UNIQUE INDEX `payments_idempotencyKey_key`(`idempotencyKey`),
    INDEX `payments_bookingId_status_idx`(`bookingId`, `status`),
    INDEX `payments_providerOrderId_idx`(`providerOrderId`),
    INDEX `payments_providerPaymentId_idx`(`providerPaymentId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `payment_events` (
    `id` VARCHAR(191) NOT NULL,
    `paymentId` VARCHAR(191) NULL,
    `provider` VARCHAR(50) NOT NULL,
    `eventId` VARCHAR(191) NOT NULL,
    `eventType` VARCHAR(100) NOT NULL,
    `payload` JSON NOT NULL,
    `processedAt` DATETIME(3) NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),

    UNIQUE INDEX `payment_events_eventId_key`(`eventId`),
    INDEX `payment_events_paymentId_createdAt_idx`(`paymentId`, `createdAt`),
    INDEX `payment_events_provider_eventType_idx`(`provider`, `eventType`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `refunds` (
    `id` VARCHAR(191) NOT NULL,
    `refundCode` VARCHAR(30) NOT NULL,
    `bookingId` VARCHAR(191) NOT NULL,
    `paymentId` VARCHAR(191) NOT NULL,
    `amount` DECIMAL(12, 2) NOT NULL,
    `currency` VARCHAR(10) NOT NULL DEFAULT 'INR',
    `status` ENUM('CREATED', 'PENDING', 'PROCESSING', 'SUCCESS', 'FAILED', 'CANCELLED') NOT NULL DEFAULT 'CREATED',
    `providerReference` VARCHAR(191) NULL,
    `reason` TEXT NULL,
    `processedAt` DATETIME(3) NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `refunds_refundCode_key`(`refundCode`),
    INDEX `refunds_bookingId_status_idx`(`bookingId`, `status`),
    INDEX `refunds_paymentId_status_idx`(`paymentId`, `status`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `trips` (
    `id` VARCHAR(191) NOT NULL,
    `bookingId` VARCHAR(191) NOT NULL,
    `status` ENUM('NOT_STARTED', 'DRIVER_EN_ROUTE', 'ARRIVED_AT_PICKUP', 'OTP_VERIFIED', 'OUTBOUND_TRIP', 'OUTBOUND_DESTINATION_REACHED', 'RETURN_SCHEDULED', 'RETURN_STARTED', 'RETURN_DESTINATION_REACHED', 'COMPLETION_REQUESTED', 'CUSTOMER_CONFIRMED', 'COMPLETED', 'CANCELLED', 'DISPUTED') NOT NULL DEFAULT 'NOT_STARTED',
    `otpHash` VARCHAR(255) NULL,
    `otpExpiresAt` DATETIME(3) NULL,
    `otpVerifiedAt` DATETIME(3) NULL,
    `driverEnRouteAt` DATETIME(3) NULL,
    `arrivedPickupAt` DATETIME(3) NULL,
    `startedAt` DATETIME(3) NULL,
    `outboundReachedAt` DATETIME(3) NULL,
    `returnScheduledAt` DATETIME(3) NULL,
    `returnStartedAt` DATETIME(3) NULL,
    `returnReachedAt` DATETIME(3) NULL,
    `completionRequestedAt` DATETIME(3) NULL,
    `customerConfirmedAt` DATETIME(3) NULL,
    `completedAt` DATETIME(3) NULL,
    `customerRating` INTEGER NULL,
    `customerFeedback` TEXT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `trips_bookingId_key`(`bookingId`),
    INDEX `trips_status_createdAt_idx`(`status`, `createdAt`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `trip_events` (
    `id` VARCHAR(191) NOT NULL,
    `tripId` VARCHAR(191) NOT NULL,
    `eventType` VARCHAR(100) NOT NULL,
    `actorUserId` VARCHAR(191) NULL,
    `metadata` JSON NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),

    INDEX `trip_events_tripId_createdAt_idx`(`tripId`, `createdAt`),
    INDEX `trip_events_eventType_createdAt_idx`(`eventType`, `createdAt`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `commission_rules` (
    `id` VARCHAR(191) NOT NULL,
    `name` VARCHAR(191) NOT NULL,
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `priority` INTEGER NOT NULL DEFAULT 100,
    `type` ENUM('PERCENTAGE', 'FIXED', 'PERCENTAGE_PLUS_FIXED') NOT NULL,
    `percentage` DECIMAL(8, 4) NULL,
    `fixedAmount` DECIMAL(12, 2) NULL,
    `categoryId` VARCHAR(191) NULL,
    `serviceKind` ENUM('PASSENGER', 'GOODS', 'BOTH') NULL,
    `city` VARCHAR(100) NULL,
    `ownerId` VARCHAR(191) NULL,
    `validFrom` DATETIME(3) NULL,
    `validTo` DATETIME(3) NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    INDEX `commission_rules_isActive_priority_idx`(`isActive`, `priority`),
    INDEX `commission_rules_categoryId_serviceKind_idx`(`categoryId`, `serviceKind`),
    INDEX `commission_rules_ownerId_isActive_idx`(`ownerId`, `isActive`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `booking_commissions` (
    `id` VARCHAR(191) NOT NULL,
    `bookingId` VARCHAR(191) NOT NULL,
    `ruleId` VARCHAR(191) NULL,
    `grossAmount` DECIMAL(12, 2) NOT NULL,
    `percentage` DECIMAL(8, 4) NULL,
    `fixedAmount` DECIMAL(12, 2) NULL,
    `commissionAmount` DECIMAL(12, 2) NOT NULL,
    `taxAmount` DECIMAL(12, 2) NOT NULL DEFAULT 0,
    `netOwnerAmount` DECIMAL(12, 2) NOT NULL,
    `calculatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `booking_commissions_bookingId_key`(`bookingId`),
    INDEX `booking_commissions_ruleId_idx`(`ruleId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `payouts` (
    `id` VARCHAR(191) NOT NULL,
    `payoutCode` VARCHAR(30) NOT NULL,
    `ownerId` VARCHAR(191) NOT NULL,
    `bookingId` VARCHAR(191) NULL,
    `amount` DECIMAL(12, 2) NOT NULL,
    `currency` VARCHAR(10) NOT NULL DEFAULT 'INR',
    `status` ENUM('PENDING', 'ELIGIBLE', 'ON_HOLD', 'PROCESSING', 'PAID', 'FAILED', 'REVERSED') NOT NULL DEFAULT 'PENDING',
    `provider` VARCHAR(50) NULL,
    `providerReference` VARCHAR(191) NULL,
    `eligibleAt` DATETIME(3) NULL,
    `processedAt` DATETIME(3) NULL,
    `paidAt` DATETIME(3) NULL,
    `failureReason` TEXT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `payouts_payoutCode_key`(`payoutCode`),
    INDEX `payouts_ownerId_status_idx`(`ownerId`, `status`),
    INDEX `payouts_bookingId_idx`(`bookingId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `owner_ledger_entries` (
    `id` VARCHAR(191) NOT NULL,
    `ownerId` VARCHAR(191) NOT NULL,
    `bookingId` VARCHAR(191) NULL,
    `entryType` VARCHAR(50) NOT NULL,
    `amount` DECIMAL(12, 2) NOT NULL,
    `currency` VARCHAR(10) NOT NULL DEFAULT 'INR',
    `description` VARCHAR(500) NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),

    INDEX `owner_ledger_entries_ownerId_createdAt_idx`(`ownerId`, `createdAt`),
    INDEX `owner_ledger_entries_bookingId_idx`(`bookingId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `notifications` (
    `id` VARCHAR(191) NOT NULL,
    `userId` VARCHAR(191) NULL,
    `ownerId` VARCHAR(191) NULL,
    `driverId` VARCHAR(191) NULL,
    `bookingId` VARCHAR(191) NULL,
    `channel` ENUM('DASHBOARD', 'EMAIL', 'SMS', 'WHATSAPP', 'PUSH') NOT NULL,
    `templateKey` VARCHAR(100) NOT NULL,
    `subject` VARCHAR(255) NULL,
    `body` TEXT NULL,
    `payload` JSON NULL,
    `status` ENUM('QUEUED', 'SENT', 'FAILED', 'READ') NOT NULL DEFAULT 'QUEUED',
    `sentAt` DATETIME(3) NULL,
    `readAt` DATETIME(3) NULL,
    `failureReason` TEXT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    INDEX `notifications_userId_status_idx`(`userId`, `status`),
    INDEX `notifications_ownerId_status_idx`(`ownerId`, `status`),
    INDEX `notifications_driverId_status_idx`(`driverId`, `status`),
    INDEX `notifications_bookingId_createdAt_idx`(`bookingId`, `createdAt`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `email_outbox` (
    `id` VARCHAR(191) NOT NULL,
    `toEmail` VARCHAR(191) NOT NULL,
    `templateKey` VARCHAR(100) NOT NULL,
    `subject` VARCHAR(255) NOT NULL,
    `payload` JSON NOT NULL,
    `status` VARCHAR(30) NOT NULL DEFAULT 'QUEUED',
    `attempts` INTEGER NOT NULL DEFAULT 0,
    `nextAttemptAt` DATETIME(3) NULL,
    `sentAt` DATETIME(3) NULL,
    `lastError` TEXT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    INDEX `email_outbox_status_nextAttemptAt_idx`(`status`, `nextAttemptAt`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `support_tickets` (
    `id` VARCHAR(191) NOT NULL,
    `ticketCode` VARCHAR(30) NOT NULL,
    `userId` VARCHAR(191) NULL,
    `bookingId` VARCHAR(191) NULL,
    `subject` VARCHAR(255) NOT NULL,
    `message` TEXT NOT NULL,
    `status` ENUM('OPEN', 'IN_PROGRESS', 'RESOLVED', 'CLOSED') NOT NULL DEFAULT 'OPEN',
    `priority` VARCHAR(30) NOT NULL DEFAULT 'NORMAL',
    `assignedToId` VARCHAR(191) NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `support_tickets_ticketCode_key`(`ticketCode`),
    INDEX `support_tickets_userId_status_idx`(`userId`, `status`),
    INDEX `support_tickets_bookingId_idx`(`bookingId`),
    INDEX `support_tickets_assignedToId_status_idx`(`assignedToId`, `status`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `terms_acceptances` (
    `id` VARCHAR(191) NOT NULL,
    `userId` VARCHAR(191) NULL,
    `bookingId` VARCHAR(191) NULL,
    `termsVersion` VARCHAR(50) NOT NULL,
    `acceptanceType` VARCHAR(50) NOT NULL,
    `ipAddress` VARCHAR(64) NULL,
    `userAgent` VARCHAR(500) NULL,
    `evidence` JSON NULL,
    `acceptedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),

    INDEX `terms_acceptances_userId_acceptedAt_idx`(`userId`, `acceptedAt`),
    INDEX `terms_acceptances_bookingId_acceptedAt_idx`(`bookingId`, `acceptedAt`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- AddForeignKey
ALTER TABLE `booking_broadcasts` ADD CONSTRAINT `booking_broadcasts_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `fare_quotes` ADD CONSTRAINT `fare_quotes_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `payments` ADD CONSTRAINT `payments_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `payment_events` ADD CONSTRAINT `payment_events_paymentId_fkey` FOREIGN KEY (`paymentId`) REFERENCES `payments`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `refunds` ADD CONSTRAINT `refunds_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `refunds` ADD CONSTRAINT `refunds_paymentId_fkey` FOREIGN KEY (`paymentId`) REFERENCES `payments`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `trips` ADD CONSTRAINT `trips_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `trip_events` ADD CONSTRAINT `trip_events_tripId_fkey` FOREIGN KEY (`tripId`) REFERENCES `trips`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `booking_commissions` ADD CONSTRAINT `booking_commissions_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `booking_commissions` ADD CONSTRAINT `booking_commissions_ruleId_fkey` FOREIGN KEY (`ruleId`) REFERENCES `commission_rules`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `payouts` ADD CONSTRAINT `payouts_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `notifications` ADD CONSTRAINT `notifications_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `support_tickets` ADD CONSTRAINT `support_tickets_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `terms_acceptances` ADD CONSTRAINT `terms_acceptances_bookingId_fkey` FOREIGN KEY (`bookingId`) REFERENCES `bookings`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
