/**
 * Types for working with server data
 * ⚠️ IMPORTANT: This file does NOT depend on @prisma/client
 *
 * These types are generated/updated based on Prisma schema
 * but these are just TypeScript types - they work everywhere!
 *
 * On server: used with Prisma models
 * On client: used as regular types for API responses
 */
export interface User {
    id: number;
    name: string;
    email: string;
    password: string;
    role: string;
    createdAt: Date;
    updatedAt: Date;
    isActive: boolean;
    lastLogin: Date | null;
}
export interface Order {
    id: number;
    tableNumber: number;
    guestsCount: number;
    orderTime: Date;
    updatedAt: Date;
    serverId: number;
    totalAmount: number;
    status: string;
    comments: string | null;
    completionTime: Date | null;
    discount: number;
    tip: number;
    shiftId: string | null;
}
export interface Table {
    id: number;
    tableNumber: number;
    capacity: number;
    status: string;
    additionalCapacity: number;
    isOccupied: boolean;
    originalCapacity: number;
    guests: number;
}
export interface Reservation {
    id: number;
    guestsCount: number;
    time: Date;
    name: string;
    phone: string;
    email: string | null;
    status: string;
    comments: string | null;
    createdAt: Date;
    updatedAt: Date;
    isActive: boolean;
}
export interface FoodItem {
    id: number;
    name: string;
    price: number;
    type: string;
    category: string;
    description: string;
    isAvailable: boolean;
    preparationTime: number;
    calories: number | null;
    image: string | null;
}
export interface DrinkItem {
    id: number;
    name: string;
    price: number;
    category: string;
    description: string;
    isAvailable: boolean;
    volume: number;
    alcoholPercentage: number | null;
    image: string | null;
}
export interface OrderFoodItem {
    id: number;
    guestNumber: number;
    price: number;
    specialRequest: string | null;
    orderId: number;
    itemId: number;
    discount: number;
    finalPrice: number;
    fired: boolean;
    printed: boolean;
    paymentStatus: string;
}
export interface OrderDrinkItem {
    id: number;
    guestNumber: number;
    price: number;
    specialRequest: string | null;
    orderId: number;
    itemId: number;
    discount: number;
    finalPrice: number;
    fired: boolean;
    printed: boolean;
    paymentStatus: string;
}
export interface Payment {
    id: number;
    orderId: number;
    amount: number;
    tax: number;
    tip: number;
    serviceCharge: number;
    totalAmount: number;
    paymentType: string;
    status: string;
    createdAt: Date;
    completedAt: Date | null;
}
export interface TableAssignmentModel {
    id: number;
    tableId: number;
    serverId: number;
}
/**
 * Response types - what is sent to the client
 * Exclude sensitive fields and use only necessary ones
 */
/**
 * User response - basic user data for client
 * Exclude password and sensitive data
 */
export type UserResponse = Pick<User, 'id' | 'name' | 'email' | 'role' | 'isActive' | 'createdAt' | 'updatedAt' | 'lastLogin'>;
/**
 * User auth response - data on login
 */
export type UserAuthResponse = Pick<User, 'id' | 'name' | 'email' | 'role' | 'isActive'>;
/**
 * Order response - full order with relations
 */
export type OrderResponse = Order & {
    server?: Pick<User, 'id' | 'name'> | null;
    table?: Pick<Table, 'id' | 'tableNumber'> | null;
    foodItems?: Array<OrderFoodItem & {
        foodItem?: Pick<FoodItem, 'id' | 'name' | 'price'>;
    }>;
    drinkItems?: Array<OrderDrinkItem & {
        drinkItem?: Pick<DrinkItem, 'id' | 'name' | 'price'>;
    }>;
};
/**
 * Table response
 */
export type TableResponse = Table & {
    activeOrder?: Order | null;
    assignments?: Array<TableAssignmentModel & {
        server?: Pick<User, 'id' | 'name'>;
    }>;
};
/**
 * Reservation response - reservation with tables and order
 */
export type ReservationResponse = Reservation & {
    tables?: Pick<Table, 'id' | 'tableNumber'>[];
    order?: Order | null;
};
/**
 * Food/Drink response types
 */
export type FoodResponse = Pick<FoodItem, 'id' | 'name' | 'description' | 'price' | 'category' | 'isAvailable'>;
export type DrinkResponse = Pick<DrinkItem, 'id' | 'name' | 'description' | 'price' | 'category' | 'isAvailable'>;
/**
 * Payment response - payment information
 */
export type PaymentResponse = Pick<Payment, 'id' | 'orderId' | 'amount' | 'status' | 'paymentType' | 'createdAt' | 'completedAt'>;
/**
 * Creation types - for POST/PUT requests
 * Exclude id and dates that are generated by the database
 */
export type CreateUserInput = Pick<User, 'name' | 'email' | 'password' | 'role'>;
export type UpdateUserInput = Partial<Pick<User, 'name' | 'email' | 'role' | 'isActive'>>;
export type CreateOrderInput = Pick<Order, 'tableNumber' | 'guestsCount' | 'serverId'>;
export type CreateReservationInput = Pick<Reservation, 'guestsCount' | 'time' | 'name' | 'phone' | 'email' | 'comments'>;
/**
 * Utility types for working with pagination
 */
export type PaginatedResponse<T> = {
    data: T[];
    total: number;
    page: number;
    pageSize: number;
    totalPages: number;
};
/**
 * API Response wrapper - standard API response format
 */
export type ApiResponse<T> = {
    success: boolean;
    data?: T;
    error?: string;
    message?: string;
    timestamp: string;
};
//# sourceMappingURL=prisma-types.d.ts.map