/**
 * Core system types for User, Organization, and related entities
 * These types are used throughout the MuluTime Plugin System
 */
export interface User {
    id: string;
    email: string;
    username: string;
    fullName: string;
    timezone?: string;
    avatar?: string;
    bio?: string;
    phoneNumber?: string;
    phone?: string;
    company?: string;
    website?: string;
    organizationId?: string;
    organizations?: string[];
    createdAt: string;
    updatedAt: string;
    subscriptionPlan: 'FREE' | 'PRO';
    subscriptionStatus: 'ACTIVE' | 'PAST_DUE' | 'CANCELED' | 'INCOMPLETE';
    subscriptionPeriodStart?: string;
    subscriptionPeriodEnd?: string;
    billingType?: 'PREPAID' | 'PAY_AS_YOU_GO';
    billingCycleStart?: string;
    meetingCredits?: number;
    meetingsUsed?: number;
    googleTokens?: {
        accessToken?: string;
        refreshToken?: string;
        expiresAt?: number;
        scope?: string;
        tokenType?: string;
    } | null;
    metadata?: Record<string, unknown>;
    settings?: {
        theme?: 'light' | 'dark' | 'system';
        notifications?: {
            email?: boolean;
            push?: boolean;
        };
        billing?: {
            autoRecharge?: boolean;
            rechargeAmount?: number;
            lowCreditAlert?: number;
        };
        bookingPreferences?: {
            defaultDuration?: number;
            bufferTimeBefore?: number;
            bufferTimeAfter?: number;
            maxAdvanceBooking?: number;
            minNoticeTime?: number;
            allowBackToBackBookings?: boolean;
            requireConfirmation?: boolean;
            autoConfirmBookings?: boolean;
            allowRescheduling?: boolean;
            allowCancellation?: boolean;
            sendReminders?: boolean;
            reminderTime?: number;
        };
    };
    verified?: boolean;
}
export interface Organization {
    id: string;
    name: string;
    slug: string;
    type: 'CLINIC' | 'HOSPITAL' | 'PRACTICE' | 'OTHER';
    ownerId: string;
    logo?: string;
    website?: string;
    email?: string;
    phone?: string;
    address?: {
        street?: string;
        city?: string;
        state?: string;
        country?: string;
        postalCode?: string;
    };
    settings?: {
        branding?: {
            primaryColor?: string;
            accentColor?: string;
            logoUrl?: string;
            customCss?: string;
        };
        features?: {
            allowTeams: boolean;
            allowGuests: boolean;
            requireEmailVerification: boolean;
            customEmailDomain?: string;
        };
        billing?: {
            billingEmail?: string;
            taxId?: string;
            billingAddress?: string;
        };
    };
    subscriptionPlan: 'FREE' | 'PRO' | 'ENTERPRISE';
    subscriptionStatus: 'ACTIVE' | 'PAST_DUE' | 'CANCELED' | 'INCOMPLETE';
    subscriptionPeriodStart?: string;
    subscriptionPeriodEnd?: string;
    createdAt: string;
    updatedAt: string;
    metadata?: Record<string, unknown>;
}
export interface OrganizationMember {
    id: string;
    organizationId: string;
    userId: string;
    role: OrganizationRole;
    permissions: OrganizationPermission[];
    joinedAt: string;
    invitedBy?: string;
    status: 'PENDING' | 'ACTIVE' | 'SUSPENDED';
    teamIds?: string[];
    createdAt: string;
    updatedAt: string;
}
export interface OrganizationInvitation {
    id: string;
    organizationId: string;
    organizationName: string;
    email: string;
    role: OrganizationRole;
    permissions: OrganizationPermission[];
    invitedBy: string;
    invitedByName: string;
    status: 'PENDING' | 'ACCEPTED' | 'DECLINED' | 'EXPIRED';
    message?: string;
    expiresAt: string;
    createdAt: string;
    updatedAt: string;
}
export interface LocationInfo {
    type: 'online' | 'inplace' | 'phone' | 'custom';
    url?: string;
    userId?: string;
    password?: string;
    address?: string;
    room?: string;
    provider?: string;
    displayName?: string;
    instraction?: string;
}
export type OrganizationRole = 'OWNER' | 'ADMIN' | 'MANAGER' | 'MEMBER' | 'GUEST';
export type OrganizationPermission = 'MANAGE_MEMBERS' | 'MANAGE_BILLING' | 'MANAGE_SETTINGS' | 'VIEW_ANALYTICS' | 'MANAGE_BOOKINGS' | 'MANAGE_SCHEDULES' | 'MANAGE_EVENT_TYPES' | 'MANAGE_PLUGINS';
export interface CalendarEventRef {
    id: string;
    start: string;
    end: string;
    title: string;
    status?: 'confirmed' | 'tentative' | 'cancelled';
    isBookingEvent?: boolean;
}
export declare enum EventVisibility {
    PUBLIC = "PUBLIC",
    PRIVATE = "PRIVATE",
    DEFAULT = "DEFAULT"
}
export interface CalendarEvent {
    id: string;
    calendarId: string;
    externalEventId?: string;
    title: string;
    description?: string;
    location?: string;
    start: string;
    end: string;
    allDay: boolean;
    organizer?: {
        id: string;
        name?: string;
        email?: string;
    };
    attendees?: Array<{
        id?: string;
        name?: string;
        email?: string;
        responseStatus?: 'accepted' | 'declined' | 'tentative' | 'needsAction';
    }>;
    recurrence?: string[];
    reminders?: number[];
    visibility?: EventVisibility;
    status?: 'confirmed' | 'tentative' | 'cancelled';
    createdAt: string;
    updatedAt: string;
    lastSyncedAt?: string;
}
export interface BookingAttendee {
    name: string;
    email: string;
    phone?: string;
    isPrimary: boolean;
    userId?: string;
    timezone?: string;
    locale?: string;
}
export type BookingStatus = 'PENDING' | 'ACCEPTED' | 'REJECTED' | 'CANCELED' | 'COMPLETED';
export type ResponseStatus = 'accepted' | 'pending' | 'declined';
export interface BookingData {
    id: string;
    uid: string;
    userId: string;
    eventTypeId: string;
    title: string;
    description?: string;
    startTime: string;
    endTime: string;
    timezone: string;
    attendees: BookingAttendee[];
    location: any;
    locations?: LocationInfo;
    status: BookingStatus;
    cancellationReason?: string;
    rejectionReason?: string;
    responseStatus?: ResponseStatus;
    responseMessage?: string;
    organizationId?: string;
    organizationSlug?: string;
    organizationName?: string;
    previousValues?: Record<string, any>;
}
//# sourceMappingURL=core-types.d.ts.map