export enum Gender {
  MALE = "MALE",
  FEMALE = "FEMALE",
  OTHER = "OTHER",
}

export enum Role {
  SUPER_ADMIN = "SUPER_ADMIN",
  DB_ADMIN = "DB_ADMIN",
  ACCOUNT_ADMIN = "ACCOUNT_ADMIN",
  PRADESH_ADMIN = "PRADESH_ADMIN",
  MANDAL_ADMIN = "MANDAL_ADMIN",
  KARYAKARTA = "KARYAKARTA",
  PERSONAL = "PERSONAL",
}

export type PreferredLanguage = "ENGLISH" | "GUJARATI" | "HINDI" | "en" | "gu" | "hi";
export type RegistrationCountryType = "INDIAN" | "NRI";

export type RegistrationDocumentType = "AADHAR" | "PAN";

export interface User {
  id: number;
  phone: string | null;
  username: string | null;
  name: string;
  haridhamId?: string | null;
  karyakartaHaridhamId?: string | null;
  profileImageUrl?: string | null;
  isDisabled?: boolean;
  isDeleted?: boolean;
  karyakartaName?: string | null;
  role: Role;
  preferredLanguage?: PreferredLanguage;
  pradeshId?: number | null;
  mandalId?: number | null;
  pradeshName?: string | null;
  mandalName?: string | null;
  createdAt?: string;
  updatedAt?: string;
}

export interface LoginRequest {
  login: string;
  password: string;
}

export interface LoginResponse {
  token: string;
  user: User;
}

export interface PasswordResetOtpRequest {
  login: string;
}

export interface PasswordResetOtpResponse {
  success: boolean;
  message: string;
  phone?: string;
  code?: string;
  supportPhone?: string;
}

export interface RegistrationOtpRequest {
  phone: string;
  countryCode?: string;
}

export interface VerifyRegistrationOtpRequest {
  phone: string;
  otp: string;
  countryCode?: string;
}

export interface RegistrationOtpResponse {
  success: boolean;
  message: string;
  phone?: string;
  code?: string;
  supportPhone?: string;
}

export interface VerifyPasswordResetOtpRequest {
  login: string;
  otp: string;
}

export interface VerifyPasswordResetOtpResponse {
  success: boolean;
  message: string;
  resetToken: string;
}

export interface ResetPasswordWithOtpRequest {
  resetToken: string;
  newPassword: string;
}

export interface ResetPasswordWithOtpResponse {
  success: boolean;
  message: string;
}

export interface ResetOwnPasswordRequest {
  newPassword: string;
  confirmPassword: string;
}

export interface ResetOwnPasswordResponse {
  success: boolean;
  message: string;
}

export interface RegisterResponse {
  message: string;
  token: string;
  user: User;
  registration: {
    id: number;
    registrant1: string;
    registrant2: string;
    mahayagPlace: string;
    totalSeva: number;
    submittedSeva: number;
    remainingSeva: number;
  };
}

export interface SendHaridhamReceiptWhatsAppResponse {
  success: boolean;
  message: string;
  data: {
    transactionId: number;
    phone: string;
  };
}

export interface RegistrationRequest {
  countryCode1: string;
  phone1: string;
  countryCode2: string;
  phone2: string;
  password?: string;
  registrant1?: string;
  registrant2?: string;
  gender1?: Gender;
  gender2?: Gender;
  birthdate1?: string;
  birthdate2?: string;
  aadharCardNo?: string;
  panCardNo?: string;
  addressLine1?: string;
  addressLine2?: string;
  city?: string;
  country?: string;
  state?: string;
  pincode?: string;
  mahayagPlace?: string;
  submittedSeva?: number;
  haridhamId?: string;
  karyakartaHaridhamId?: string;
  district?: string;
  registrationType?: "SINGLE" | "COUPLE";
  registrationCountryType?: RegistrationCountryType;
  preferredLanguage?: PreferredLanguage;
}

export interface RegistrationTransaction {
  id: number;
  amount: string;
  method: string;
  status: string;
  receiptNumber?: string | null;
  receiptUrl?: string | null;
  haridhamReceiptUrl?: string | null;
  haridhamReceiptUploadedAt?: string | null;
  createdAt: string;
}

export interface PersonalDashboardTransaction {
  id: number;
  registrationId: number;
  registrant1: string | null;
  mahayagPlace: string | null;
  amount: number;
  method: string;
  status: string;
  statusRemark?: string | null;
  receiptNumber?: string | null;
  receiptUrl?: string | null;
  haridhamReceiptUrl?: string | null;
  haridhamReceiptUploadedAt?: string | null;
  createdAt: string;
}

export interface PersonalDashboardResponse {
  success: boolean;
  summary: {
    totalSeva: number;
    submittedSeva: number;
    remainingSeva: number;
  };
  counts: {
    registrations: number;
    transactions: number;
  };
  registrations: Array<{
    id: number;
    registrant1: string;
    registrant2: string;
    mahayagPlace: string;
    aadharCardUrl?: string | null;
    panCardUrl?: string | null;
    pendingDocumentReupload?: RegistrationDocumentType[];
    haridhamId: string | null;
    karyakartaHaridhamId?: string | null;
    hasAssignedKaryakartaAccount: boolean;
    totalSeva: number;
    submittedSeva: number;
    remainingSeva: number;
    createdAt: string;
  }>;
  transactions: PersonalDashboardTransaction[];
}

export interface MeResponse {
  success: boolean;
  user: User;
  personalDashboard: PersonalDashboardResponse | null;
  transactions: PersonalDashboardTransaction[];
}

export interface NotificationItem {
  id: number;
  recipientRole: Role;
  type: string;
  title: string;
  message: string;
  metadata?: Record<string, unknown> | null;
  isRead: boolean;
  readAt?: string | null;
  transactionId?: number | null;
  registrationId?: number | null;
  actorUserId?: number | null;
  createdAt: string;
  updatedAt: string;
  actorUser?: {
    id: number;
    name: string;
    role: Role;
  } | null;
}

export interface SuperAdminNotificationsResponse {
  success: boolean;
  unreadCount: number;
  notifications: NotificationItem[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface MarkNotificationReadResponse {
  success: boolean;
  notification: NotificationItem;
}

export interface ProfileImageMutationResponse {
  success: boolean;
  message: string;
  data: {
    id: number;
    profileImageUrl: string | null;
  };
}

export interface UpdatePreferredLanguageResponse {
  success: boolean;
  message: string;
  data: {
    id: number;
    preferredLanguage: PreferredLanguage;
  };
}

export interface Registration {
  id?: number;
  userId?: number;
  phone1?: string;
  phone2?: string;
  phone: string;
  countryCode?: string; // Country code for international phone numbers
  countryCode1?: string;
  countryCode2?: string;
  password?: string;
  district?: string;
  country?: string;
  mahayagPlace: string;
  mahayagSeva?: string;
  submittedSeva?: string;
  remainingSeva?: string;
  registrant1: string;
  mobile1: string; // Mobile number for registrant 1
  registrant2: string;
  mobile2: string; // Mobile number for registrant 2
  isCouple: boolean;
  gender1: Gender;
  gender2: Gender;
  birthdate1: string; // ISO format - First registrant
  birthdate2: string; // ISO format - Second registrant
  haridhamId?: string;
  karyakartaHaridhamId?: string;
  karyakartaName?: string;
  karyakartaPhone?: string | null;
  pradeshName?: string;
  mandalName?: string;
  email?: string;
  aadharCardNo: string;
  panCardNo?: string;
  aadharCardUrl?: string | null;
  panCardUrl?: string | null;
  pendingDocumentReupload?: RegistrationDocumentType[];
  addressLine1?: string;
  addressLine2?: string;
  city?: string;
  state?: string;
  pincode?: string;
  physicallyHandicap?: boolean;
  needATG?: boolean;
  registrationType?: "SINGLE" | "COUPLE";
  registrationCountryType?: RegistrationCountryType;
  createdAt?: string;
  updatedAt?: string;
  isDeleted?: boolean;
  deletedAt?: string | null;
  deletedActions?: Array<{
    reason?: string;
    createdAt?: string;
    deletedByUserId?: number;
  }>;
  user?: {
    id: number;
    name: string;
    phone: string | null;
    role: string;
    haridhamId?: string | null;
    karyakartaHaridhamId?: string | null;
    isDeleted?: boolean;
  };
  transactions?: RegistrationTransaction[];
}

export interface PaginatedResponse<T> {
  registrations: T[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface PaginationParams {
  page?: number;
  limit?: number;
  search?: string;
  phone?: string;
  district?: string;
  registrationCountryType?: RegistrationCountryType;
  haridhamId?: string;
  deletedFilter?: "ACTIVE" | "DELETED" | "ALL";
  sortBy?: string;
  sortOrder?: "asc" | "desc";
  [key: string]: string | number | boolean | undefined;
}

export interface PaymentSession {
  razorpayOrderId: string;
  razorpayPaymentId: string;
  amount: number;
  status: string;
  transactionId: number;
}

export interface OnlinePaymentTransaction {
  id: number;
  amount: number;
  method: string;
  status: string;
  receiptNumber?: string | null;
  receiptUrl?: string | null;
}

export interface PaymentVerificationResponse {
  success: boolean;
  message: string;
  transaction: OnlinePaymentTransaction;
  registration: {
    id: number;
    submittedSeva: number;
    remainingSeva: number;
  };
}

export interface PaymentSuccessPayload {
  transaction: OnlinePaymentTransaction;
  razorpayOrderId: string;
  razorpayPaymentId: string;
}

export interface CashflowLifecycle {
  cashRequestedToKaryakartaAt: string | null;
  cashAcceptedByKaryakartaAt: string | null;
  cashRequestedToPradeshAt: string | null;
  cashAcceptedByPradeshAt: string | null;
  receiptGeneratedAt: string | null;
  createdAt: string;
  updatedAt: string;
}

export interface CashflowRegistration {
  id: number;
  registrant1: string;
  registrant2?: string | null;
  phone1: string;
  mahayagPlace: string;
  haridhamId?: string | null;
  karyakartaHaridhamId?: string | null;
  mandalId?: number | null;
  pradeshId?: number | null;
}

export interface CashflowItem {
  id: number;
  status: string;
  amount: number;
  method: string;
  statusRemark?: string | null;
  chequePhotoUrl?: string | null;
  corpusLetterUrl?: string | null;
  chequeNumber?: string | null;
  receiptNumber?: string | null;
  receiptUrl?: string | null;
  cashflowBunchId?: number | null;
  lifecycle: CashflowLifecycle;
  registration: CashflowRegistration;
}

export interface CashflowListResponse {
  success: boolean;
  count: number;
  cashflows: CashflowItem[];
  pagination?: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface PradeshCashflowFilters {
  pradeshId?: number;
  mandalId?: number;
  haridhamId?: string;
  fromDate?: string;
  toDate?: string;
  page?: number;
  limit?: number;
  sortBy?: string;
  sortOrder?: "asc" | "desc";
}

export interface CashflowBunchItem {
  id: number;
  status: string;
  pradeshId: number;
  pradeshName?: string | null;
  requestedByUserId: number;
  requestedByName?: string | null;
  acceptedByUserId?: number | null;
  acceptedByName?: string | null;
  totalAmount: number;
  transactionCount: number;
  receiptNumber?: string | null;
  receiptUrl?: string | null;
  receiptGeneratedAt?: string | null;
  requestedAt: string;
  acceptedAt?: string | null;
  createdAt: string;
  updatedAt: string;
}

export interface CashflowBunchDetail extends CashflowBunchItem {
  transactions: CashflowItem[];
}

export interface CashflowBunchListResponse {
  success: boolean;
  count: number;
  bunches: CashflowBunchItem[];
  pagination?: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface CashflowBunchDetailResponse {
  success: boolean;
  bunch: CashflowBunchDetail;
}

export interface CashOnHandKaryakartaSummary {
  haridhamId: string;
  karyakartaName?: string | null;
  pendingAmount: number;
  transactionCount: number;
}

export interface CashOnHandDashboardResponse extends CashflowListResponse {
  summary: {
    totalPendingAmount: number;
    totalTransactions: number;
    totalKaryakartas: number;
  };
  karyakartaSummary: CashOnHandKaryakartaSummary[];
}

export interface BulkCashAcceptResponse {
  success: boolean;
  message: string;
  count: number;
  totalAmount: number;
  receiptNumber?: string | null;
  receiptUrl?: string | null;
  cashflows: CashflowItem[];
}

export interface CashflowTimelineResponse {
  success: boolean;
  transactionId: number;
  status: string;
  receiptNumber?: string | null;
  receiptUrl?: string | null;
  lifecycle: CashflowLifecycle;
}

export interface CashflowReceiptResponse {
  success: boolean;
  receiptNumber: string;
  receiptUrl: string;
}

export interface AnalyticsTotals {
  totalRegistrations: number;
  totalPersons: number;
  totalPaid: number;
  totalRemaining: number;
}

export interface AnalyticsSummary {
  fullyPaidRegistrations: number;
  pendingRegistrations: number;
  paymentCompletionRate: number;
  avgSevaPerRegistration: number;
  avgPaidPerRegistration: number;
  avgPersonsPerRegistration: number;
  activeKaryakartas: number;
  activeMandals: number;
  activePradeshs: number;
}

export interface AnalyticsMahayagPlaceItem {
  placeName: string;
  registrations: number;
  persons: number;
  paid: number;
  remaining: number;
}

export interface AnalyticsDailyTrendItem {
  date: string;
  label: string;
  registrations: number;
  persons: number;
  paid: number;
}

export interface AnalyticsKaryakartaItem {
  haridhamId: string | null;
  karyakartaName: string | null;
  mandalName?: string | null;
  pradeshName?: string | null;
  registrations: number;
  persons: number;
  paid: number;
  remaining: number;
  placeBreakdown?: AnalyticsMahayagPlaceItem[];
  topPlaceName?: string | null;
  topPlaceRegistrations?: number;
}

export interface AnalyticsMandalItem {
  mandalId: number | null;
  mandalName: string;
  pradeshName?: string;
  registrations: number;
  persons: number;
  paid: number;
  remaining: number;
}

export interface AnalyticsPradeshItem {
  pradeshId: number | null;
  pradeshName: string;
  registrations: number;
  persons: number;
  paid: number;
  remaining: number;
}

export interface AnalyticsDashboard {
  role: Role | "MANDAL_ADMIN" | "PRADESH_ADMIN" | "SUPER_ADMIN";
  totals: AnalyticsTotals;
  summary?: AnalyticsSummary;
  appliedFilters?: {
    pradeshId?: string | number;
    mandalId?: string | number;
    haridhamId?: string;
    fromDate?: string;
    toDate?: string;
  };
  mahayagPlaceWise?: AnalyticsMahayagPlaceItem[];
  dailyTrend?: AnalyticsDailyTrendItem[];
  karyakartaWise?: AnalyticsKaryakartaItem[];
  mandalWise?: AnalyticsMandalItem[];
  pradeshWise?: AnalyticsPradeshItem[];
}

export interface AnalyticsDashboardResponse {
  success: boolean;
  dashboard: AnalyticsDashboard;
}

export interface HierarchyTreeKaryakarta {
  karyakartaId: number;
  karyakartaName: string;
  haridhamId: string;
}

export interface HierarchyTreeMandal {
  mandalId: number;
  mandalName: string;
  karyakartas: HierarchyTreeKaryakarta[];
}

export interface HierarchyTreePradesh {
  pradeshId: number;
  pradeshName: string;
  mandals: HierarchyTreeMandal[];
}

export interface HierarchyTreeResponse {
  success: boolean;
  data: HierarchyTreePradesh[];
}

export interface UnassignedRegistrationRow {
  id: number;
  userId: number;
  registrant1: string;
  registrant2: string;
  phone1: string;
  district: string | null;
  haridhamId: string | null;
  mandalId: number | null;
  pradeshId: number | null;
  createdAt: string;
}

export interface UnassignedRegistrationsResponse {
  success: boolean;
  data: UnassignedRegistrationRow[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface AssignKaryakartaResponse {
  success: boolean;
  message: string;
  data: {
    registration: {
      id: number;
      registrant1: string;
      registrant2: string;
      phone1: string;
      haridhamId: string;
      mandalId: number;
      pradeshId: number;
    };
    karyakarta: {
      code: string;
      name: string;
      mandalName: string;
    };
  };
}

export interface AssignHaridhamIdResponse {
  success: boolean;
  message: string;
  data: {
    registration: {
      id: number;
      userId: number;
      haridhamId: string;
      mandalId: number | null;
      pradeshId: number | null;
    };
    linkedKaryakarta: {
      code: string;
      name: string;
      mandalName: string;
    } | null;
  };
}

export interface AssignPersonalHaridhamIdResponse {
  success: boolean;
  message: string;
  data: {
    registrationId: number;
    user: {
      id: number;
      haridhamId: string;
    };
  };
}

export interface AdminUpdateRegistrationNamesResponse {
  success: boolean;
  message: string;
  data: {
    id: number;
    userId: number;
    registrant1: string;
    registrant2: string;
    phone1: string;
  };
}

export interface UploadHaridhamReceiptResponse {
  success: boolean;
  message: string;
  data: {
    id: number;
    haridhamReceiptUrl: string | null;
    haridhamReceiptUploadedAt: string | null;
  };
}

export interface AdminRequestDocumentReuploadResponse {
  success: boolean;
  message: string;
  data: {
    registrationId: number;
    requestedDocumentType: RegistrationDocumentType;
    pendingDocumentReupload: RegistrationDocumentType[];
  };
}

export interface UploadRequestedDocumentResponse {
  success: boolean;
  message: string;
  data: {
    registrationId: number;
    uploadedDocumentType: RegistrationDocumentType;
    pendingDocumentReupload: RegistrationDocumentType[];
  };
}

export interface KaryakartaDataRow {
  id: number;
  name: string;
  phone: string;
  haridhamId: string | null;
  karyakartaLinkMatched?: boolean;
  aadharCardNo?: string | null;
  panCardNo?: string | null;
  aadharCardUrl?: string | null;
  panCardUrl?: string | null;
  profilePhotoUrl?: string | null;
  pradesh: string;
  pradeshId: number | null;
  mandal: string;
  district: string | null;
  detectedDistrict: string | null;
  latitude: number | null;
  longitude: number | null;
  createdAt: string;
  updatedAt: string;
}

export interface KaryakartaDataListResponse {
  success: boolean;
  data: KaryakartaDataRow[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface KaryakartaDataUpdateResponse {
  success: boolean;
  message: string;
  data: KaryakartaDataRow;
}

export interface KaryakartaDataCreateResponse {
  success: boolean;
  message: string;
  data: KaryakartaDataRow;
}

export interface KaryakartaDataAssignHaridhamResponse {
  success: boolean;
  message: string;
  data: KaryakartaDataRow;
}

export interface MahayagRateRow {
  id: number;
  placeName: string;
  amount: string;
}

export interface AdminMahayagRatesListResponse {
  success: boolean;
  data: MahayagRateRow[];
}

export interface AdminMahayagRateMutationResponse {
  success: boolean;
  message: string;
  data: MahayagRateRow;
}

export interface AdminMahayagRateDeleteResponse {
  success: boolean;
  message: string;
  data: MahayagRateRow;
}

export interface AdminAccountRow {
  id: number;
  name: string;
  username: string | null;
  phone: string | null;
  role: Role | "PRADESH_ADMIN" | "MANDAL_ADMIN" | "KARYAKARTA" | "PERSONAL";
  isDisabled: boolean;
  pradeshId: number | null;
  pradeshName: string | null;
  mandalId: number | null;
  mandalName: string | null;
  haridhamId: string | null;
  karyakartaName: string | null;
  createdAt: string;
  updatedAt: string;
}

export interface AdminAccountsListResponse {
  success: boolean;
  data: AdminAccountRow[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface AdminAccountMutationResponse {
  success: boolean;
  message: string;
  data?: Partial<AdminAccountRow>;
}

export interface AdminKaryakartaHaridhamAvailabilityResponse {
  success: boolean;
  available: boolean;
  reason?: "INVALID_FORMAT" | "ALREADY_ASSIGNED" | null;
  message?: string;
}

export interface AdminOnlineTransactionRow {
  id: number;
  amount: string | number;
  status: string;
  method: string;
  createdAt: string;
  updatedAt: string;
  canCancel: boolean;
  paymentSession: {
    id: string;
    razorpayOrderId: string;
    razorpayPaymentId: string | null;
    status: string;
  } | null;
  registration: {
    id: number;
    registrant1: string;
    registrant2: string;
    phone1: string;
    mahayagPlace: string;
    submittedSeva: string | number;
    remainingSeva: string | number;
  };
}

export interface AdminOnlineTransactionsResponse {
  success: boolean;
  data: AdminOnlineTransactionRow[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface AdminRecentTransactionRow {
  id: number;
  amount: string | number;
  status: string;
  method: string;
  createdAt: string;
  updatedAt: string;
  receiptNumber?: string | null;
  receiptUrl?: string | null;
  haridhamReceiptUrl?: string | null;
  chequePhotoUrl?: string | null;
  corpusLetterUrl?: string | null;
  chequeNumber?: string | null;
  chequeDocumentsRequestedReuploadAt?: string | null;
  chequeApprovedAt?: string | null;
  canApproveCheque?: boolean;
  canRequestChequeReupload?: boolean;
  paymentSession: {
    id: string;
    razorpayOrderId: string;
    razorpayPaymentId: string | null;
    status: string;
  } | null;
  registration: {
    id: number;
    registrant1: string;
    registrant2: string;
    phone1: string;
    mahayagPlace: string;
    submittedSeva: string | number;
    remainingSeva: string | number;
  };
}

export interface AdminApproveChequeTransactionResponse {
  success: boolean;
  message: string;
  data: {
    transactionId: number;
    status: string;
    registrationId: number;
  };
}

export interface AdminRequestChequeReuploadResponse {
  success: boolean;
  message: string;
  data: {
    id: number;
    status: string;
    chequeDocumentsRequestedReuploadAt: string | null;
  };
}

export interface RegistrationOtpRow {
  id: number;
  phone: string;
  otp: string;
  attemptCount: number;
  expiresAt: string;
  verifiedAt: string | null;
  usedAt: string | null;
  createdAt: string;
}

export interface PasswordResetOtpRow {
  id: number;
  userId: number;
  phone: string;
  otp: string;
  attemptCount: number;
  expiresAt: string;
  verifiedAt: string | null;
  usedAt: string | null;
  resetAt: string | null;
  createdAt: string;
}

export interface AdminOtpPagination {
  page: number;
  limit: number;
  total: number;
  totalPages: number;
}

export interface AdminOtpSorting {
  sortBy: string;
  sortOrder: "asc" | "desc";
}

export interface AdminRegistrationOtpsResponse {
  success: boolean;
  data: RegistrationOtpRow[];
  sorting: AdminOtpSorting;
  pagination: AdminOtpPagination;
}

export interface AdminPasswordResetOtpsResponse {
  success: boolean;
  data: PasswordResetOtpRow[];
  sorting: AdminOtpSorting;
  pagination: AdminOtpPagination;
}

export interface AdminRecentTransactionsResponse {
  success: boolean;
  data: AdminRecentTransactionRow[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    totalPages: number;
  };
}

export interface AdminCancelOnlineTransactionResponse {
  success: boolean;
  message: string;
  data: {
    transactionId: number;
    status: string;
    razorpayPaymentId: string | null;
    registrationId: number;
  };
}

export interface AdminDeleteRegistrationAndUserResponse {
  success: boolean;
  message: string;
  data: {
    registrationId: number;
    userId: number;
    deletedTransactions: number;
    archivedPaymentSessions: number;
    reason?: string;
  };
}

export interface RazorpayResponse {
  razorpay_order_id: string;
  razorpay_payment_id: string;
  razorpay_signature: string;
}

export interface RazorpayInstance {
  open: () => void;
}

export interface RazorpayOptions {
  key: string;
  amount: number;
  currency: string;
  name: string;
  description: string;
  order_id: string;
  handler: (response: RazorpayResponse) => void;
  prefill?: {
    name?: string;
    email?: string;
    contact?: string;
  };
  theme?: {
    color?: string;
  };
  modal?: {
    ondismiss?: () => void;
  };
  notes?: Record<string, string>;
}

export interface ApiErrorResponse {
  data?: {
    message?: string;
    error?: string;
    code?: string;
    supportPhone?: string;
  };
  message?: string;
}
