import { AppointmentService } from './appointment.service';
import { UpdateAppointmentDto } from './dto/update-appointment.dto';
import { FilterAppointmentDto } from './dto/filter-appointment.dto';
import { CreateAppointmentDto } from './dto/create-appointment.dto';
import { GetStylistAppointmentsDto } from './dto/get-appointments.dto';
import { ModifyBookingDto } from './dto/modify-booking.dto';
import { AppointmentGeneratedBy } from '../common/enums';
import { AvailabilityService } from './appointmenthelper';
export declare class AppointmentController {
    private readonly appointmentService;
    private readonly availabilityService;
    constructor(appointmentService: AppointmentService, availabilityService: AvailabilityService);
    bookAppointment(req: any, body: CreateAppointmentDto): Promise<{
        success: boolean;
        reason: string;
        availability: {
            stylistId: import("mongoose").Types.ObjectId;
            name: string;
            days: {
                date: string;
                slots: {
                    start: string;
                    end: string;
                }[];
            }[];
        }[];
        stylistId?: undefined;
        appointmentId?: undefined;
        payment_type?: undefined;
        payment_status?: undefined;
        payment_provider?: undefined;
        payment_intent_id?: undefined;
        clientSecret?: undefined;
        publishableKey?: undefined;
        chargeAmount?: undefined;
        depositAmount?: undefined;
        remainingAmount?: undefined;
        totalAmount?: undefined;
    } | {
        success: boolean;
        stylistId: any;
        appointmentId: import("mongoose").Types.ObjectId;
        payment_type: string;
        payment_status: string;
        payment_provider: string;
        payment_intent_id: string;
        clientSecret: string | null;
        publishableKey: string;
        chargeAmount: number;
        depositAmount: number;
        remainingAmount: number;
        totalAmount: number;
        reason?: undefined;
        availability?: undefined;
    } | {
        success: boolean;
        stylistId: any;
        appointmentId: import("mongoose").Types.ObjectId;
        reason?: undefined;
        availability?: undefined;
        payment_type?: undefined;
        payment_status?: undefined;
        payment_provider?: undefined;
        payment_intent_id?: undefined;
        clientSecret?: undefined;
        publishableKey?: undefined;
        chargeAmount?: undefined;
        depositAmount?: undefined;
        remainingAmount?: undefined;
        totalAmount?: undefined;
    }>;
    reschedule(oldId: string, req: any, body: CreateAppointmentDto): Promise<{
        message: string;
        success: boolean;
        stylistId: any;
        appointmentId: import("mongoose").Types.ObjectId;
        payment_type: string;
        payment_status: string;
        payment_provider: string;
        payment_intent_id: string;
        clientSecret: string | null;
        publishableKey: string;
        chargeAmount: number;
        depositAmount: number;
        remainingAmount: number;
        totalAmount: number;
        reason?: undefined;
        availability?: undefined;
        error?: undefined;
    } | {
        message: string;
        success: boolean;
        stylistId: any;
        appointmentId: import("mongoose").Types.ObjectId;
        reason?: undefined;
        availability?: undefined;
        payment_type?: undefined;
        payment_status?: undefined;
        payment_provider?: undefined;
        payment_intent_id?: undefined;
        clientSecret?: undefined;
        publishableKey?: undefined;
        chargeAmount?: undefined;
        depositAmount?: undefined;
        remainingAmount?: undefined;
        totalAmount?: undefined;
        error?: undefined;
    } | {
        success: boolean;
        reason: string;
        availability: {
            stylistId: import("mongoose").Types.ObjectId;
            name: string;
            days: {
                date: string;
                slots: {
                    start: string;
                    end: string;
                }[];
            }[];
        }[];
        stylistId?: undefined;
        appointmentId?: undefined;
        payment_type?: undefined;
        payment_status?: undefined;
        payment_provider?: undefined;
        payment_intent_id?: undefined;
        clientSecret?: undefined;
        publishableKey?: undefined;
        chargeAmount?: undefined;
        depositAmount?: undefined;
        remainingAmount?: undefined;
        totalAmount?: undefined;
        message?: undefined;
        error?: undefined;
    } | {
        success: boolean;
        stylistId: any;
        appointmentId: import("mongoose").Types.ObjectId;
        payment_type: string;
        payment_status: string;
        payment_provider: string;
        payment_intent_id: string;
        clientSecret: string | null;
        publishableKey: string;
        chargeAmount: number;
        depositAmount: number;
        remainingAmount: number;
        totalAmount: number;
        reason?: undefined;
        availability?: undefined;
        message?: undefined;
        error?: undefined;
    } | {
        success: boolean;
        stylistId: any;
        appointmentId: import("mongoose").Types.ObjectId;
        reason?: undefined;
        availability?: undefined;
        payment_type?: undefined;
        payment_status?: undefined;
        payment_provider?: undefined;
        payment_intent_id?: undefined;
        clientSecret?: undefined;
        publishableKey?: undefined;
        chargeAmount?: undefined;
        depositAmount?: undefined;
        remainingAmount?: undefined;
        totalAmount?: undefined;
        message?: undefined;
        error?: undefined;
    } | {
        success: boolean;
        message: string;
        error: any;
    }>;
    getAppointments(query: FilterAppointmentDto, req: any): Promise<any>;
    getStylistAppointments(query: GetStylistAppointmentsDto, req: any): Promise<any>;
    update(id: string, dto: UpdateAppointmentDto): Promise<import("mongoose").Document<unknown, {}, import("../model/schemas/appointment.schema").Appointment, {}, {}> & import("../model/schemas/appointment.schema").Appointment & {
        _id: import("mongoose").Types.ObjectId;
    } & {
        __v: number;
    }>;
    delete(id: string): Promise<(import("mongoose").Document<unknown, {}, import("../model/schemas/appointment.schema").Appointment, {}, {}> & import("../model/schemas/appointment.schema").Appointment & {
        _id: import("mongoose").Types.ObjectId;
    } & {
        __v: number;
    }) | null>;
    modify(updates: ModifyBookingDto, req: any): Promise<{
        success: boolean;
        reason: string;
        availability: {
            stylistId: import("mongoose").Types.ObjectId;
            name: string;
            days: {
                date: string;
                slots: {
                    start: string;
                    end: string;
                }[];
            }[];
        }[];
        stylistId?: undefined;
        appointmentId?: undefined;
        payment_type?: undefined;
        payment_status?: undefined;
        payment_provider?: undefined;
        payment_intent_id?: undefined;
        clientSecret?: undefined;
        publishableKey?: undefined;
        chargeAmount?: undefined;
        depositAmount?: undefined;
        remainingAmount?: undefined;
        totalAmount?: undefined;
    } | {
        success: boolean;
        stylistId: any;
        appointmentId: import("mongoose").Types.ObjectId;
        payment_type: string;
        payment_status: string;
        payment_provider: string;
        payment_intent_id: string;
        clientSecret: string | null;
        publishableKey: string;
        chargeAmount: number;
        depositAmount: number;
        remainingAmount: number;
        totalAmount: number;
        reason?: undefined;
        availability?: undefined;
    } | {
        success: boolean;
        stylistId: any;
        appointmentId: import("mongoose").Types.ObjectId;
        reason?: undefined;
        availability?: undefined;
        payment_type?: undefined;
        payment_status?: undefined;
        payment_provider?: undefined;
        payment_intent_id?: undefined;
        clientSecret?: undefined;
        publishableKey?: undefined;
        chargeAmount?: undefined;
        depositAmount?: undefined;
        remainingAmount?: undefined;
        totalAmount?: undefined;
    } | {
        success: boolean;
        reason: string;
        cancelled?: undefined;
    } | {
        success: boolean;
        cancelled: boolean;
        reason?: undefined;
    } | undefined>;
    markAsNoshow(bookingId: string): Promise<{
        success: boolean;
        reason?: undefined;
    } | {
        success: boolean;
        reason: string;
    }>;
    getAvailableStylists(serviceId?: string, requested?: string, timezone?: string): Promise<{
        _id: string;
        hasFreeSlot: boolean;
        isRequestedTimeAvailable: boolean;
        freeIntervals: {
            start: string;
            end: string;
        }[];
    }[]>;
    getCancelledAppointments(stylistId: string): Promise<(import("mongoose").FlattenMaps<{
        appointmentId: import("mongoose").Types.ObjectId;
        salonId: import("mongoose").Types.ObjectId;
        stylistId: import("mongoose").Types.ObjectId;
        clientId: import("mongoose").Types.ObjectId;
        cancelledAt: Date;
        cancelledBy: AppointmentGeneratedBy;
        client_name: string;
        client_phone: string;
        client_email: string;
        reason?: string | undefined;
    }> & {
        _id: import("mongoose").Types.ObjectId;
    } & {
        __v: number;
    })[]>;
    getAppointmentById(id: string): Promise<{
        _id: import("mongoose").Types.ObjectId;
        salonId: import("mongoose").Types.ObjectId;
        start: Date;
        end: Date;
        status: import("../common/enums").AppointmentStatus;
        appointmentFee: number;
        depositAmount: any;
        remainingAmount: any;
        generatedBy: AppointmentGeneratedBy;
        payment_type: string;
        payment_status: string;
        payment_provider: string;
        payment_intent_id: string;
        service: (import("mongoose").FlattenMaps<import("../model/schemas/service.schema").Service> & Required<{
            _id: import("mongoose").Types.ObjectId;
        }> & {
            __v: number;
        }) | null;
        services: (import("mongoose").FlattenMaps<import("../model/schemas/service.schema").Service> & Required<{
            _id: import("mongoose").Types.ObjectId;
        }> & {
            __v: number;
        })[];
        client: (import("mongoose").FlattenMaps<import("../model/schemas/client.schema").Client> & Required<{
            _id: import("mongoose").Types.ObjectId;
        }> & {
            __v: number;
        }) | null;
        stylist: (import("mongoose").FlattenMaps<import("../model/schemas/stylist.schema").Stylist> & Required<{
            _id: import("mongoose").Types.ObjectId;
        }> & {
            __v: number;
        }) | null;
        createdAt: any;
        updatedAt: any;
    }>;
}
