/**
 * Generated by orval v8.5.3 🍺
 * Do not edit manually.
 * Api
 * TeaBoy OS API specification
 * OpenAPI spec version: 0.1.0
 */
export interface HealthStatus {
  status: string;
}

export interface ErrorResponse {
  error: string;
}

export interface SuccessResponse {
  success: boolean;
}

export interface RegisterBody {
  username: string;
  email: string;
  password: string;
  /** @nullable */
  displayNameAr?: string | null;
  /** @nullable */
  displayNameEn?: string | null;
  preferredLanguage?: string;
}

export interface LoginBody {
  username: string;
  password: string;
}

export interface UpdateLanguageBody {
  language: string;
}

export interface AuthUser {
  id: number;
  username: string;
  email: string;
  /** @nullable */
  displayNameAr?: string | null;
  /** @nullable */
  displayNameEn?: string | null;
  preferredLanguage: string;
  /** @nullable */
  avatarUrl?: string | null;
  isActive: boolean;
  roles: string[];
  createdAt: string;
}

export interface UserProfile {
  id: number;
  username: string;
  email: string;
  /** @nullable */
  displayNameAr?: string | null;
  /** @nullable */
  displayNameEn?: string | null;
  preferredLanguage: string;
  /** @nullable */
  avatarUrl?: string | null;
  isActive: boolean;
  roles: string[];
  createdAt: string;
}

export interface UpdateUserBody {
  /** @nullable */
  displayNameAr?: string | null;
  /** @nullable */
  displayNameEn?: string | null;
  isActive?: boolean;
  preferredLanguage?: string;
}

export interface App {
  id: number;
  slug: string;
  nameAr: string;
  nameEn: string;
  /** @nullable */
  descriptionAr?: string | null;
  /** @nullable */
  descriptionEn?: string | null;
  iconName: string;
  route: string;
  color: string;
  isActive: boolean;
  isSystem: boolean;
  sortOrder: number;
  createdAt: string;
  updatedAt: string;
}

export interface CreateAppBody {
  slug: string;
  nameAr: string;
  nameEn: string;
  /** @nullable */
  descriptionAr?: string | null;
  /** @nullable */
  descriptionEn?: string | null;
  iconName: string;
  route: string;
  color: string;
  isActive?: boolean;
  isSystem?: boolean;
  sortOrder?: number;
}

export interface UpdateAppBody {
  nameAr?: string;
  nameEn?: string;
  /** @nullable */
  descriptionAr?: string | null;
  /** @nullable */
  descriptionEn?: string | null;
  iconName?: string;
  route?: string;
  color?: string;
  isActive?: boolean;
  sortOrder?: number;
}

export interface Service {
  id: number;
  /** @nullable */
  categoryId?: number | null;
  nameAr: string;
  nameEn: string;
  /** @nullable */
  descriptionAr?: string | null;
  /** @nullable */
  descriptionEn?: string | null;
  /** @nullable */
  imageUrl?: string | null;
  /** @nullable */
  price?: string | null;
  isAvailable: boolean;
  sortOrder: number;
  createdAt: string;
  updatedAt: string;
}

export interface CreateServiceBody {
  /** @nullable */
  categoryId?: number | null;
  nameAr: string;
  nameEn: string;
  /** @nullable */
  descriptionAr?: string | null;
  /** @nullable */
  descriptionEn?: string | null;
  /** @nullable */
  imageUrl?: string | null;
  /** @nullable */
  price?: string | null;
  isAvailable?: boolean;
  sortOrder?: number;
}

export interface UpdateServiceBody {
  /** @nullable */
  categoryId?: number | null;
  nameAr?: string;
  nameEn?: string;
  /** @nullable */
  descriptionAr?: string | null;
  /** @nullable */
  descriptionEn?: string | null;
  /** @nullable */
  imageUrl?: string | null;
  /** @nullable */
  price?: string | null;
  isAvailable?: boolean;
  sortOrder?: number;
}

export interface ServiceCategory {
  id: number;
  nameAr: string;
  nameEn: string;
  sortOrder: number;
  createdAt: string;
}

export interface ParticipantInfo {
  id: number;
  username: string;
  /** @nullable */
  displayNameAr?: string | null;
  /** @nullable */
  displayNameEn?: string | null;
  /** @nullable */
  avatarUrl?: string | null;
  isAdmin: boolean;
}

export interface MessageWithSender {
  id: number;
  conversationId: number;
  senderId: number;
  content: string;
  sender: ParticipantInfo;
  createdAt: string;
  updatedAt: string;
}

export interface ConversationWithDetails {
  id: number;
  /** @nullable */
  nameAr?: string | null;
  /** @nullable */
  nameEn?: string | null;
  isGroup: boolean;
  createdBy: number;
  participants: ParticipantInfo[];
  lastMessage?: MessageWithSender | null;
  unreadCount: number;
  createdAt: string;
  updatedAt: string;
}

export interface CreateConversationBody {
  participantIds: number[];
  /** @nullable */
  nameAr?: string | null;
  /** @nullable */
  nameEn?: string | null;
  isGroup?: boolean;
}

export interface SendMessageBody {
  content: string;
}

export interface Notification {
  id: number;
  userId: number;
  titleAr: string;
  titleEn: string;
  /** @nullable */
  bodyAr?: string | null;
  /** @nullable */
  bodyEn?: string | null;
  type: string;
  isRead: boolean;
  /** @nullable */
  relatedId?: number | null;
  /** @nullable */
  relatedType?: string | null;
  createdAt: string;
}

export interface AppSettings {
  siteNameAr: string;
  siteNameEn: string;
  registrationOpen: boolean;
  footerTextAr: string;
  footerTextEn: string;
  updatedAt?: string;
}

export interface UpdateMyAppOrderBody {
  /** App IDs in the desired display order */
  order: number[];
}

export interface UpdateAppSettingsBody {
  /**
   * @minLength 1
   * @maxLength 200
   */
  siteNameAr?: string;
  /**
   * @minLength 1
   * @maxLength 200
   */
  siteNameEn?: string;
  registrationOpen?: boolean;
  /**
   * @minLength 1
   * @maxLength 300
   */
  footerTextAr?: string;
  /**
   * @minLength 1
   * @maxLength 300
   */
  footerTextEn?: string;
}

export interface RequestUploadUrlBody {
  /** @minLength 1 */
  name: string;
  /** @minimum 1 */
  size: number;
  /** @minLength 1 */
  contentType: string;
}

export interface RequestUploadUrlResponse {
  uploadURL: string;
  objectPath: string;
  metadata?: RequestUploadUrlBody;
}

export interface HomeStats {
  totalApps: number;
  totalServices: number;
  unreadNotifications: number;
  unreadMessages: number;
  totalUsers: number;
}

export type AdminStatsSignupsByDayItem = {
  date: string;
  count: number;
};

export interface AdminStats {
  newUsersLast7Days: number;
  newUsersPrev7Days: number;
  activeServices: number;
  inactiveServices: number;
  signupsByDay: AdminStatsSignupsByDayItem[];
}
