import { Resource } from "../../common";
import { APIProfile, Ethnicity, Gender, QuestionnaireInvites, StoreProfile } from "./interfaces";
export declare class Profile extends Resource {
    /**
     * The id of the user who owns the profile
     */
    userId: string;
    /**
     * The profile's name.
     */
    name: string;
    /**
     * The profile's sex.
     */
    sex: Gender | null;
    /**
     * The profile's birth year.
     */
    birthYear: number | null;
    /**
     * The profile's birth year.
     */
    birthMonth: number | null;
    /**
     * The profile's birth year.
     */
    birthDay: number | null;
    /**
     * The profile's ethnicity.
     */
    ethnicity: Ethnicity | null;
    /**
     * The email of the user for this profile.
     */
    email: string;
    /**
     * The list of invites for a questionnaire a client recieved.
     */
    protected _questionnaireInvites: QuestionnaireInvites;
    /**
     * Profile creation timestamp.
     */
    createdAt?: number | undefined;
    /**
     * Latest height value store for this profile.
     */
    height?: number | null | undefined;
    /**
     * Latest weight value store for this profile.
     */
    weight?: number | null | undefined;
    /**
     * Holds if the profile is version 2.
     */
    isV2?: boolean | undefined;
    constructor(
    /**
     * The id of the user who owns the profile
     */
    userId: string, 
    /**
     * The profile's name.
     */
    name: string, 
    /**
     * The profile's sex.
     */
    sex: Gender | null, 
    /**
     * The profile's birth year.
     */
    birthYear: number | null, 
    /**
     * The profile's birth year.
     */
    birthMonth: number | null, 
    /**
     * The profile's birth year.
     */
    birthDay: number | null, 
    /**
     * The profile's ethnicity.
     */
    ethnicity: Ethnicity | null, 
    /**
     * The email of the user for this profile.
     */
    email: string, 
    /**
     * The list of invites for a questionnaire a client recieved.
     */
    _questionnaireInvites: QuestionnaireInvites, 
    /**
     * Profile creation timestamp.
     */
    createdAt?: number | undefined, 
    /**
     * Latest height value store for this profile.
     */
    height?: number | null | undefined, 
    /**
     * Latest weight value store for this profile.
     */
    weight?: number | null | undefined, 
    /**
     * Holds if the profile is version 2.
     */
    isV2?: boolean | undefined);
    private toDecimalField;
    /**
     * This property should be readonly, so this method provides the readability part, yet keeps the property protected.
     */
    get questionnaireInvites(): QuestionnaireInvites;
    /**
     * A computed property, which tells if any of the sex,
     * birthYear or ethnicity fields is null
     */
    get hasDataMissing(): boolean;
    /**
     * The name of the Profile resource on the API server.
     */
    static get resourceName(): string;
    /**
     * The name of the service containing the profile resource.
     */
    static get serviceName(): string;
    /**
     * Returns true if, in a StoreProfile object, any of
     * the sex, birthYear or ethnicity properties is null.
     *
     * Returns false otherwise
     */
    static hasDataMissing(storeProfile: StoreProfile): boolean;
    /**
     * Convert the profile into a JSON serializable object for the API server.
     */
    serializeAPI(): APIProfile;
    /**
     * Deserialize the data from the API server.
     *
     * @param data The profile data from the API server.
     */
    deserializeAPI(data: APIProfile): void;
    /**
     * Serialize the profile into a format for storing in the Redux store.
     */
    serializeRedux(): StoreProfile;
    /**
     * Create a profile from the API server data.
     *
     * @param data Data from the api server.
     *
     * @returns The profile object.
     */
    static apiFactory(data: APIProfile): Profile;
    /**
     * Create a profile from the Redux store data.
     *
     * @param data Data from the api server.
     *
     * @returns The profile object.
     */
    static reduxFactory(data: StoreProfile): Profile;
    /**
     * Create this resource on the server
     * In case of error, it throws an APIResponseError which
     * contains the result of calling handleError(errorResponse).
     * Note: This method is essentially the same thing as .save() except
     * it's only for the "/dna-sample/{barcode}" path.
     */
    createProfileFromBarcode(barcode: string): Promise<void>;
}
