export type platform_user_role = 'ADMIN';

export type delivery_order_status = 'PENDING' | 'IN_PROGRESS' | 'DELIVERED' | 'CANCELLED';

export type account_user_uniqueKey = {
  id: string; // Unique Key
};

export type account_user_without_PKs = {
  account: string;
  password: string;
  email: string;
  role: platform_user_role;
  createdAt: Date;
  updatedAt: Date;
};

export type account_user = account_user_uniqueKey & account_user_without_PKs;



export type delivery_order_uniqueKey = {
  id: string; // Unique Key
};

export type delivery_order_without_PKs = {
  orderNo: string;
  governorateName: string;
  areaName: string;
  nearestLandmark: string;
  customerName: string;
  customerPhone: string;
  driverName: string;
  orderType: string;
  status: delivery_order_status;
  createdAt: Date;
  updatedAt: Date;
};

export type delivery_order = delivery_order_uniqueKey & delivery_order_without_PKs;



export type delivery_order_status_history_uniqueKey = {
  id: string; // Unique Key
};

export type delivery_order_status_history_without_PKs = {
  deliveryOrderId: string; // Foreign Key to delivery_order.id
  fromStatus?: delivery_order_status | null;
  toStatus: delivery_order_status;
  changedById?: string | null; // Foreign Key to account_user.id
  createdAt: Date;
};

export type delivery_order_status_history = delivery_order_status_history_uniqueKey & delivery_order_status_history_without_PKs;




export type StringFilter = {
  contains?: string;
  startsWith?: string;
  endsWith?: string;
  equals?: string;
  in?: string[];
  notIn?: string[];
  not?: string | StringFilter;
};

export type NumberFilter = {
  equals?: number;
  in?: number[];
  notIn?: number[];
  not?: number | NumberFilter;
  lt?: number;
  lte?: number;
  gt?: number;
  gte?: number;
};

export type DateFilter = {
  equals?: Date;
  in?: Date[];
  notIn?: Date[];
  not?: Date | DateFilter;
  lt?: Date;
  lte?: Date;
  gt?: Date;
  gte?: Date;
};

export type platformUserRoleFilter = {
  equals?: platform_user_role;
  in?: platform_user_role[];
  notIn?: platform_user_role[];
  not?: platform_user_role | platformUserRoleFilter;
};

export type deliveryOrderStatusFilter = {
  equals?: delivery_order_status;
  in?: delivery_order_status[];
  notIn?: delivery_order_status[];
  not?: delivery_order_status | deliveryOrderStatusFilter;
};

export type filtered_account_user = {
  id?: string | StringFilter | null;
  account?: string | StringFilter | null;
  password?: string | StringFilter | null;
  email?: string | StringFilter | null;
  role?: platform_user_role | platformUserRoleFilter | null;
  createdAt?: Date | DateFilter | null;
  updatedAt?: Date | DateFilter | null;
};

export type filtered_delivery_order = {
  id?: string | StringFilter | null;
  orderNo?: string | StringFilter | null;
  governorateName?: string | StringFilter | null;
  areaName?: string | StringFilter | null;
  nearestLandmark?: string | StringFilter | null;
  customerName?: string | StringFilter | null;
  customerPhone?: string | StringFilter | null;
  driverName?: string | StringFilter | null;
  orderType?: string | StringFilter | null;
  status?: delivery_order_status | deliveryOrderStatusFilter | null;
  createdAt?: Date | DateFilter | null;
  updatedAt?: Date | DateFilter | null;
};

export type filtered_delivery_order_status_history = {
  id?: string | StringFilter | null;
  deliveryOrderId?: string | StringFilter | null; // Foreign Key to delivery_order.id
  fromStatus?: delivery_order_status | deliveryOrderStatusFilter | null;
  toStatus?: delivery_order_status | deliveryOrderStatusFilter | null;
  changedById?: string | StringFilter | null; // Foreign Key to account_user.id
  createdAt?: Date | DateFilter | null;
};

export type Entities = {
  account_user: {
    Create(data: account_user): Promise<account_user | null>;
    Get(args: account_user_uniqueKey): Promise<account_user | null>;
    GetAll(args?: filtered_account_user): Promise<account_user[]>;
    GetPage(pageNumber?: number, pageSize?: number, args?: filtered_account_user): Promise<account_user[]>;
    Count(args?: filtered_account_user): Promise<number>;
    Update(args: { where: account_user_uniqueKey; data: account_user_without_PKs }): Promise<account_user | null>;
    Delete(args: account_user_uniqueKey): Promise<account_user | null>;
  };
  delivery_order: {
    Create(data: delivery_order): Promise<delivery_order | null>;
    Get(args: delivery_order_uniqueKey): Promise<delivery_order | null>;
    GetAll(args?: filtered_delivery_order): Promise<delivery_order[]>;
    GetPage(pageNumber?: number, pageSize?: number, args?: filtered_delivery_order): Promise<delivery_order[]>;
    Count(args?: filtered_delivery_order): Promise<number>;
    Update(args: { where: delivery_order_uniqueKey; data: delivery_order_without_PKs }): Promise<delivery_order | null>;
    Delete(args: delivery_order_uniqueKey): Promise<delivery_order | null>;
  };
  delivery_order_status_history: {
    Create(data: delivery_order_status_history): Promise<delivery_order_status_history | null>;
    Get(args: delivery_order_status_history_uniqueKey): Promise<delivery_order_status_history | null>;
    GetAll(args?: filtered_delivery_order_status_history): Promise<delivery_order_status_history[]>;
    GetPage(pageNumber?: number, pageSize?: number, args?: filtered_delivery_order_status_history): Promise<delivery_order_status_history[]>;
    Count(args?: filtered_delivery_order_status_history): Promise<number>;
    Update(args: { where: delivery_order_status_history_uniqueKey; data: delivery_order_status_history_without_PKs }): Promise<delivery_order_status_history | null>;
    Delete(args: delivery_order_status_history_uniqueKey): Promise<delivery_order_status_history | null>;
  };
};

