import { UserPreferences } from "@shared/types";
import env from "@server/env";
import { User } from "@server/models";

type Options = {
  includeDetails?: boolean;
};

type UserPresentation = {
  id: string;
  name: string;
  avatarUrl: string | null | undefined;
  createdAt: Date;
  updatedAt: Date;
  lastActiveAt: Date | null;
  color: string;
  isAdmin: boolean;
  isSuspended: boolean;
  isViewer: boolean;
  email?: string | null;
  language?: string;
  preferences?: UserPreferences | null;
};

export default function presentUser(
  user: User,
  options: Options = {}
): UserPresentation {
  const userData: UserPresentation = {
    id: user.id,
    name: user.name,
    avatarUrl: user.avatarUrl,
    color: user.color,
    isAdmin: user.isAdmin,
    isSuspended: user.isSuspended,
    isViewer: user.isViewer,
    createdAt: user.createdAt,
    updatedAt: user.updatedAt,
    lastActiveAt: user.lastActiveAt,
  };

  if (options.includeDetails) {
    userData.email = user.email;
    userData.language = user.language || env.DEFAULT_LANGUAGE;
    userData.preferences = user.preferences;
  }

  return userData;
}
