import { Prisma, SpaceType, PricingType } from '@prisma/client';
import { PrismaService } from '../../prisma/prisma.service';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
interface CreateSpaceInput {
    complexId: string;
    name: string;
    type?: SpaceType;
    description?: string;
    capacity?: number;
    hourlyFee?: number;
    flatFee?: number;
    priceType?: PricingType;
    imageUrl?: string;
    openTime?: string;
    closeTime?: string;
    isBookable?: boolean;
    amenities?: string[];
    rules?: string;
}
interface RequestBookingInput {
    spaceId: string;
    startAt: Date;
    endAt: Date;
    notes?: string;
}
export declare class BookingsService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    createSpace(user: AuthenticatedUser, dto: CreateSpaceInput): Promise<{
        id: string;
        description: string | null;
        name: string;
        currency: string;
        createdAt: Date;
        complexId: string;
        type: import(".prisma/client").$Enums.SpaceType;
        enabled: boolean;
        flatFee: Prisma.Decimal | null;
        hourlyFee: Prisma.Decimal;
        capacity: number | null;
        priceType: import(".prisma/client").$Enums.PricingType;
        imageUrl: string | null;
        openTime: string | null;
        closeTime: string | null;
        isBookable: boolean;
        amenities: string[];
        rules: string | null;
    }>;
    listSpaces(user: AuthenticatedUser, complexId?: string): Prisma.PrismaPromise<{
        id: string;
        description: string | null;
        name: string;
        currency: string;
        createdAt: Date;
        complexId: string;
        type: import(".prisma/client").$Enums.SpaceType;
        enabled: boolean;
        flatFee: Prisma.Decimal | null;
        hourlyFee: Prisma.Decimal;
        capacity: number | null;
        priceType: import(".prisma/client").$Enums.PricingType;
        imageUrl: string | null;
        openTime: string | null;
        closeTime: string | null;
        isBookable: boolean;
        amenities: string[];
        rules: string | null;
    }[]> | never[];
    request(user: AuthenticatedUser, dto: RequestBookingInput): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.BookingStatus;
        userId: string;
        notes: string | null;
        spaceId: string;
        startAt: Date;
        endAt: Date;
        totalFee: Prisma.Decimal;
    }>;
    confirm(user: AuthenticatedUser, id: string): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.BookingStatus;
        userId: string;
        notes: string | null;
        spaceId: string;
        startAt: Date;
        endAt: Date;
        totalFee: Prisma.Decimal;
    }>;
    cancel(user: AuthenticatedUser, id: string): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.BookingStatus;
        userId: string;
        notes: string | null;
        spaceId: string;
        startAt: Date;
        endAt: Date;
        totalFee: Prisma.Decimal;
    }>;
    list(user: AuthenticatedUser, filters: {
        spaceId?: string;
        mine?: boolean;
    }): Promise<({
        user: {
            id: string;
            email: string;
            firstName: string | null;
        };
        space: {
            id: string;
            name: string;
            type: import(".prisma/client").$Enums.SpaceType;
        };
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.BookingStatus;
        userId: string;
        notes: string | null;
        spaceId: string;
        startAt: Date;
        endAt: Date;
        totalFee: Prisma.Decimal;
    })[]>;
}
export {};
