import { DTOUserEmailSettings, DTOUserUpdatePayload } from "@supernova-studio/client";
import { UserProfile, UserProfileRemoteModel, UserProfileTransportModel, UserThemeRemoteModel } from "./SDKUserProfile";
type UserSource = "SignUp" | "Invite" | "SSO";
export type UserUpdateModel = DTOUserUpdatePayload;
export type UserRemoteModel = {
    id: string;
    email: string;
    source: UserSource | null;
    createdAt: string;
    profile: UserProfileRemoteModel;
    theme?: UserThemeRemoteModel;
    linkedIntegrations?: LinkedIntegrations;
    emailSettings?: UserEmailSettingsRemoteModel;
};
export type LinkedIntegrations = {
    figma?: UserLinkedIntegration;
    github?: UserLinkedIntegration[];
    azure?: UserLinkedIntegration[];
    gitlab?: UserLinkedIntegration[];
    bitbucket?: UserLinkedIntegration[];
};
type UserLinkedIntegration = {
    id: string;
    email?: string;
    handle?: string;
    authType?: "OAuth2" | "PAT";
    avatarUrl?: string;
    customUrl?: string;
};
export type UserEmailSettingsRemoteModel = DTOUserEmailSettings;
export type UserTransportModel = Pick<User, "id" | "email" | "source"> & {
    createdAt: string;
    profile: UserProfileTransportModel;
    linkedIntegrations?: LinkedIntegrations;
    emailSettings?: UserEmailSettingsRemoteModel;
};
export type UserAvatarUpdateModel = {
    avatar?: string;
};
export declare class User {
    /** Unique user identifier */
    id: string;
    /** Unique user email */
    email: string;
    /** When was the user created */
    createdAt: Date | null;
    /** User profile */
    profile: UserProfile;
    /** Source of user account */
    source: UserSource | null;
    /** Linked integrations */
    linkedIntegrations: LinkedIntegrations | null;
    /** Email settings */
    emailSettings: UserEmailSettingsRemoteModel | null;
    constructor(model: UserRemoteModel);
    /** Constructs representation that can be used to write full object to remote */
    toRemote(): UserRemoteModel;
    /** Constructs representation that can be used to transport the instantiated object as JSON, for example for SSR <> Client use-cases. Reconstruct to class instance using `fromTransport` */
    toTransport(): UserTransportModel;
    /** Reconstructs class from the transport model */
    static fromTransport(model: UserTransportModel): User;
    /** Returns user's name which should be used in read-only cases. */
    get displayName(): string;
    /** Returns user's initials */
    get initials(): string;
    get firstName(): string | undefined;
}
export {};
