import { AptlyOrganizationSchema } from './organization.js';
import { AptlyProjectSchema } from './project.js';
import { AptlyUnitSchema } from './unit.js';
import { AptlyUserSchema } from './user.js';
export type AptlyBooking = AptlyBookingSchema<string, string>;
export interface AptlyBookingSchema<ID, DATE> {
    _id: ID;
    organization: ID | AptlyOrganizationSchema<ID, DATE>;
    project: ID | AptlyProjectSchema<ID, DATE>;
    unit: ID | AptlyUnitSchema<ID, DATE>;
    user: ID | AptlyUserSchema<ID, DATE>;
    availability: ID | AptlyAvailabilitySchema<ID, DATE>;
    calendar: ID | AptlyAvailabilityCalendarSchema<ID, DATE>;
    availableTime: ID;
    from: DATE;
    to: DATE;
    archived?: boolean;
}
export type AptlyAvailability = AptlyAvailabilitySchema<string, string>;
export interface AptlyAvailabilitySchema<ID, DATE> {
    _id: ID;
    organization?: ID | AptlyOrganizationSchema<ID, DATE>;
    project: ID | AptlyProjectSchema<ID, DATE>;
    archived?: boolean;
    calendars: AptlyAvailabilityCalendarSchema<ID, DATE>[];
}
export type AptlyAvailabilityCalendar = AptlyAvailabilityCalendarSchema<string, string>;
export interface AptlyAvailabilityCalendarSchema<ID, DATE> {
    _id: ID;
    name: string;
    description: string;
    fee?: number;
    location: {
        name: string;
        formatted_address?: string;
        geometry?: {
            location: {
                lat: number;
                lng: number;
            };
        };
    };
    attendees: (ID | AptlyUserSchema<ID, DATE>)[];
    availableTimes: AptlyAvailabilityCalendarAvailableTimeSchema<ID, DATE>[];
    endAvailabilityAt?: DATE | null;
    userAvailability?: ID[];
}
export type AptlyAvailabilityCalendarAvailableTime = AptlyAvailabilityCalendarAvailableTimeSchema<string, string>;
export interface AptlyAvailabilityCalendarAvailableTimeSchema<ID, DATE> {
    _id: ID;
    from: DATE;
    to: DATE;
    booked: boolean;
    booking: ID;
    user?: ID | AptlyUserSchema<ID, DATE>;
    calendar?: ID;
}
