import { Repository } from 'typeorm';
import { ClsService } from 'nestjs-cls';
import { BookingChangeRequestEntity, ChangeRequestKind, ChangeRequestStatus } from '../../entities/booking-change-request.entity';
import { BookingEntity } from '../../entities/booking.entity';
import { UserEntity } from '../../entities/user.entity';
import { CreateChangeRequestDto } from './dto/create-change-request.dto';
import { DecideChangeRequestDto } from './dto/decide-change-request.dto';
import { BookingService } from '../booking/booking.service';
import { NotificationService } from '../notification/notification.service';
import { AuditService } from '../audit/audit.service';
export declare class ChangeRequestService {
    private readonly repo;
    private readonly bookingRepo;
    private readonly userRepo;
    private readonly cls;
    private readonly bookingService;
    private readonly notifications;
    private readonly auditService;
    constructor(repo: Repository<BookingChangeRequestEntity>, bookingRepo: Repository<BookingEntity>, userRepo: Repository<UserEntity>, cls: ClsService, bookingService: BookingService, notifications: NotificationService, auditService: AuditService);
    private tenantId;
    create(bookingId: string, dto: CreateChangeRequestDto): Promise<{
        id: string;
        message: string;
    }>;
    createForQuote(quoteId: string, kind: ChangeRequestKind, payload: Record<string, unknown>, requesterRemarks?: string | null): Promise<{
        id: string;
        refreshed: boolean;
    }>;
    createAutoForBooking(bookingId: string, kind: ChangeRequestKind, payload: Record<string, unknown>, detail: string): Promise<{
        id: string;
        refreshed: boolean;
    } | null>;
    findByBooking(bookingId: string): Promise<BookingChangeRequestEntity[]>;
    findPending(): Promise<BookingChangeRequestEntity[]>;
    findAll(status?: ChangeRequestStatus, pagination?: {
        page?: number;
        limit?: number;
    }): Promise<{
        items: BookingChangeRequestEntity[];
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    findById(id: string): Promise<BookingChangeRequestEntity>;
    withdraw(id: string): Promise<{
        id: string;
        status: ChangeRequestStatus;
        message: string;
    }>;
    decide(id: string, dto: DecideChangeRequestDto): Promise<{
        id: string;
        status: ChangeRequestStatus;
        message: string;
    }>;
}
