export interface AuthenticatedAccountRole {
  id: string;
  name: string;
  defaultRedirection: string | null;
  hasHiddenVerticalNavigation: boolean | null;
}

export interface AuthenticatedAccountTenant {
  id: string;
  name: string;
}

export interface AuthenticatedAccountUser {
  id: string;
  name: string;
  surname: string | null;
  langId: string | null;
  meta: Record<string, unknown> | null;
}

export interface AuthenticatedAccount {
  id: string;
  clientId: string | null;
  email: string | null;
  username: string;
  isActive: boolean;
  scopes: string[];
  dApplicationCodes: string[];
  dPermissions: { all: string[] } & Record<string, string[]>;
  dTenants: string[];
  meta: Record<string, unknown> | null;
  roles: AuthenticatedAccountRole[];
  tenants: AuthenticatedAccountTenant[];
  user: AuthenticatedAccountUser | null;
  createdAt: string | null;
  updatedAt: string | null;
  deletedAt: string | null;
}

export interface IAccountLoader {
  loadById(accountId: string): Promise<AuthenticatedAccount | null>;
}
