export type UserRole = "admin" | "operator" | "viewer" | "technik";
export type EquipmentStatus = "active" | "service" | "retired";
export type BookingOperationTaskType = "preparation" | "delivery" | "pickup" | "verification";
export type OperationsEquipmentKind = "laptop" | "tablet" | "printer" | "router" | "flipchart";
export interface BookingOperationTask {
    date: string | null;
    time: string | null;
}
export interface BookingOperationsPlan {
    preparation: BookingOperationTask;
    delivery: BookingOperationTask;
    pickup: BookingOperationTask;
    verification: BookingOperationTask;
}
export interface UserPreferences {
    equipmentCategoryOrder: string[];
    equipmentItemOrder: string[];
    timelineIncludeInactive: boolean;
    equipmentIncludeInactive: boolean;
}
export type StatisticsRangePreset = "month" | "year" | "custom";
export interface AuthUser {
    id: string;
    name: string;
    email: string;
    role: UserRole;
    isActive: boolean;
}
export interface AuthSession {
    token: string;
    user: AuthUser;
}
export interface EquipmentCategory {
    id: string;
    name: string;
    itemCount: number;
    activeItemCount: number;
    serviceItemCount: number;
    retiredItemCount: number;
    createdAt: string;
    updatedAt: string;
}
export interface EquipmentItem {
    id: string;
    categoryId: string;
    categoryName: string;
    name: string;
    shortName: string | null;
    useShortNameOnTimeline: boolean;
    serialNumber: string | null;
    assetTag: string | null;
    suggestedDayRate: number | null;
    status: EquipmentStatus;
    notes: string | null;
    isVisibleOnTimeline: boolean;
    createdAt: string;
    updatedAt: string;
}
export interface RentalBooking {
    id: string;
    equipmentItemId: string;
    relationGroupKey: string | null;
    customerName: string;
    orderNumber: string | null;
    projectNumber: string | null;
    projectName: string | null;
    notes: string | null;
    startDate: string;
    endDate: string;
    startTime: string | null;
    endTime: string | null;
    operationsPlan: BookingOperationsPlan | null;
    dayRate: number | null;
    totalPrice: number | null;
    createdBy: string | null;
    createdByName: string | null;
    createdAt: string;
    updatedAt: string;
}
export interface TimelineItem extends EquipmentItem {
    bookings: RentalBooking[];
}
export interface TimelineGroup {
    categoryId: string;
    categoryName: string;
    totalItems: number;
    visibleItems: number;
    items: TimelineItem[];
}
export interface TimelineFilters {
    from: string;
    to: string;
    categoryIds: string[];
    status: EquipmentStatus | "all";
    search: string;
    customerName: string;
    includeInactive: boolean;
}
export interface TimelineResponse {
    range: {
        from: string;
        to: string;
        dayCount: number;
    };
    filters: TimelineFilters;
    groups: TimelineGroup[];
}
export interface RevenueByProductStat {
    categoryId: string;
    categoryName: string;
    productKey: string;
    productName: string;
    productShortName: string | null;
    bookingCount: number;
    revenue: number;
    lifetimeRevenue: number;
}
export interface RevenueByCategoryStat {
    categoryId: string;
    categoryName: string;
    bookingCount: number;
    revenue: number;
    lifetimeRevenue: number;
}
export interface RevenueByCustomerStat {
    customerName: string;
    bookingCount: number;
    revenue: number;
}
export interface UserClickStat {
    userId: string;
    userName: string;
    clickDate: string;
    clickCount: number;
}
export interface StatsResponse {
    from: string;
    to: string;
    totalRevenue: number;
    revenueByProduct: RevenueByProductStat[];
    revenueByCategory: RevenueByCategoryStat[];
    revenueByCustomer: RevenueByCustomerStat[];
    userClicks: UserClickStat[];
}
export interface OperationsTaskEntry {
    id: string;
    scopeKey: string;
    type: BookingOperationTaskType;
    date: string;
    time: string | null;
    customerName: string;
    orderNumber: string | null;
    projectNumber: string | null;
    projectName: string | null;
    bookingIds: string[];
    itemNames: string[];
    itemCount: number;
    taskItems: Array<{
        bookingId: string;
        equipmentItemId: string;
        name: string;
        kind: OperationsEquipmentKind | null;
        serialNumber: string | null;
        assetTag: string | null;
    }>;
    equipmentKinds: OperationsEquipmentKind[];
    checkedEquipmentKinds: OperationsEquipmentKind[];
    confirmedEquipmentItemIds: string[];
    isFinished: boolean;
    finishedAt: string | null;
}
export interface OperationsResponse {
    from: string;
    to: string;
    tasks: OperationsTaskEntry[];
}
export interface OperationsTaskProgressPayload {
    scopeKey: string;
    type: BookingOperationTaskType;
    date: string;
    time: string | null;
    checkedEquipmentKinds: OperationsEquipmentKind[];
    confirmedEquipmentItemIds: string[];
    markFinished: boolean;
}
export interface ChatUserSummary {
    id: string;
    name: string;
    role: UserRole;
}
export interface ChatMessage {
    id: string;
    senderId: string;
    senderName: string;
    recipientId: string;
    recipientName: string;
    body: string;
    createdAt: string;
    readAt: string | null;
}
export interface ChatThread {
    user: ChatUserSummary;
    lastMessage: ChatMessage | null;
    unreadCount: number;
}
export interface ChatConversation {
    user: ChatUserSummary;
    messages: ChatMessage[];
}
export declare const USER_ROLE_OPTIONS: Array<{
    value: UserRole;
    label: string;
}>;
export declare const EQUIPMENT_STATUS_OPTIONS: Array<{
    value: EquipmentStatus;
    label: string;
}>;
export declare const BOOKING_OPERATION_TASK_TYPES: Array<{
    value: BookingOperationTaskType;
    label: string;
}>;
export declare const addDays: (date: string, days: number) => string;
export declare const getDefaultBookingOperationsPlan: (input: {
    startDate: string;
    endDate: string;
    startTime?: string | null;
    endTime?: string | null;
}) => BookingOperationsPlan;
export declare const normalizeBookingOperationsPlan: (input: Partial<Record<BookingOperationTaskType, Partial<BookingOperationTask> | null>> | null | undefined, fallback: {
    startDate: string;
    endDate: string;
    startTime?: string | null;
    endTime?: string | null;
}) => BookingOperationsPlan;
export declare const shiftBookingOperationsPlan: (operationsPlan: Partial<Record<BookingOperationTaskType, Partial<BookingOperationTask> | null>> | null | undefined, source: {
    startDate: string;
    endDate: string;
    startTime?: string | null;
    endTime?: string | null;
}, target: {
    startDate: string;
    endDate: string;
    startTime?: string | null;
    endTime?: string | null;
}) => BookingOperationsPlan | null;
export declare const BOOKING_TIME_PATTERN: RegExp;
export declare const DEFAULT_BOOKING_START_TIME = "00:00";
export declare const DEFAULT_BOOKING_END_TIME = "23:59";
export declare const normalizeBookingTime: (value?: string | null) => string | null;
export declare const getBookingStartStamp: (booking: Pick<RentalBooking, "startDate" | "startTime">) => number;
export declare const getBookingEndStamp: (booking: Pick<RentalBooking, "endDate" | "endTime">) => number;
export declare const bookingIntervalsOverlap: (left: Pick<RentalBooking, "startDate" | "endDate" | "startTime" | "endTime">, right: Pick<RentalBooking, "startDate" | "endDate" | "startTime" | "endTime">) => boolean;
export declare const bookingConflictOnDay: (left: Pick<RentalBooking, "startDate" | "endDate" | "startTime" | "endTime">, right: Pick<RentalBooking, "startDate" | "endDate" | "startTime" | "endTime">, day: string) => boolean;
export declare const enumerateDays: (from: string, to: string) => string[];
export declare const dayDiffInclusive: (from: string, to: string) => number;
export declare const roundCurrency: (value: number) => number;
export declare const normalizeEquipmentModelName: (value: string) => string;
export declare const buildUnitLabel: (baseName: string, index: number, totalUnits: number) => string;
export declare const calculateBookingTotalPrice: (startDate: string, endDate: string, dayRate?: number | null) => number | null;
export declare const bookingHasManualTotalPrice: (booking: Pick<RentalBooking, "startDate" | "endDate" | "dayRate" | "totalPrice">) => boolean;
//# sourceMappingURL=index.d.ts.map