import { HttpClient } from '../common/HttpClient';
import { UrlClass } from './UrlClass';
import { ExportFileTypeValue, GarminDomain, ICalendar, ICountActivities, IGarminTokens, IOauth1Token, IOauth2Token, IScheduleWorkout, ISocialProfile, IUserSettings, IWorkout, IWorkoutDetail, UploadFileTypeTypeValue, GCConfig } from './types';
import { ActivitySubType, ActivityType, GCActivityId, IActivity } from './types/activity';
import { ICourse, ICourseDetail } from './types/course';
import { SleepData, SleepDailySummary } from './types/sleep';
import { HRVData } from './types/hrv';
import { LatestTrainingStatusResponse, TrainingLoadBalanceResponse, WeeklyTrainingStatusResponse } from './types/training-status';
import { PersonalInfoResponse } from './types/personal-info';
import Running from './workouts/Running';
export interface Session {
}
export default class GarminConnect {
    client: HttpClient;
    domain: GarminDomain;
    config: GCConfig;
    private _userHash;
    private listeners;
    url: UrlClass;
    constructor(config: GCConfig, domain?: GarminDomain);
    login(username?: string, password?: string, sessionId?: string): Promise<GarminConnect>;
    exportTokenToFile(dirPath: string): Promise<void>;
    loadTokenByFile(dirPath: string): Promise<void>;
    exportToken(): IGarminTokens;
    loadToken(oauth1: IOauth1Token, oauth2: IOauth2Token): void;
    getUserSettings(): Promise<IUserSettings>;
    getUserProfile(): Promise<ISocialProfile>;
    getActivities(start?: number, limit?: number, activityType?: ActivityType, subActivityType?: ActivitySubType): Promise<IActivity[]>;
    getActivity(activity: {
        activityId: GCActivityId;
    }): Promise<IActivity>;
    countActivities(): Promise<ICountActivities>;
    downloadWellnessData(date: Date, dir: string): Promise<void>;
    downloadOriginalActivityData(activity: {
        activityId: GCActivityId;
    }, dir: string, type?: ExportFileTypeValue): Promise<void>;
    uploadActivity(file: string, format?: UploadFileTypeTypeValue): Promise<unknown>;
    deleteActivity(activity: {
        activityId: GCActivityId;
    }): Promise<void>;
    getWorkouts(start: number, limit: number): Promise<IWorkout[]>;
    getWorkoutDetail(workout: {
        workoutId: string;
    }): Promise<IWorkoutDetail>;
    addWorkout(workout: IWorkoutDetail | Running): Promise<IWorkoutDetail>;
    addRunningWorkout(name: string, meters: number, description: string): Promise<IWorkoutDetail>;
    deleteWorkout(workout: {
        workoutId: string;
    }): Promise<unknown>;
    scheduleWorkout(workout: {
        workoutId: string;
    }, date?: Date): Promise<IScheduleWorkout>;
    getCalendar(year?: number, month?: number): Promise<ICalendar>;
    getSteps(date?: Date): Promise<number>;
    getSleepData(date?: Date): Promise<SleepData>;
    getSleepDuration(date?: Date): Promise<{
        hours: number;
        minutes: number;
    }>;
    getSleepDailySummary(startDate: Date, endDate: Date): Promise<SleepDailySummary>;
    getHRVData(date?: Date): Promise<HRVData>;
    getTrainingStatus(date?: Date): Promise<LatestTrainingStatusResponse>;
    getTrainingLoadBalance(date?: Date): Promise<TrainingLoadBalanceResponse>;
    getWeeklyTrainingStatus(startDate: Date, endDate: Date): Promise<WeeklyTrainingStatusResponse>;
    getPersonalInfo(): Promise<PersonalInfoResponse>;
    getDailyWeightData(date?: Date): Promise<WeightData>;
    getDailyWeightInPounds(date?: Date): Promise<number>;
    getDailyHydration(date?: Date): Promise<number>;
    updateWeight(date: Date | undefined, lbs: number, timezone: string): Promise<UpdateWeight>;
    updateHydrationLogOunces(date: Date | undefined, valueInOz: number): Promise<WaterIntake>;
    getGolfSummary(): Promise<GolfSummary>;
    getGolfScorecard(scorecardId: number): Promise<GolfScorecard>;
    getHeartRate(date?: Date): Promise<HeartRate>;
    getCourses(): Promise<ICourse[]>;
    getCourse(course: {
        courseId: number;
    }): Promise<ICourseDetail>;
    createCourse(course: ICourseDetail): Promise<ICourseDetail>;
    consentGrant(): Promise<void>;
    get<T>(url: string, data?: any): Promise<T>;
    post<T>(url: string, data: any): Promise<T>;
    put<T>(url: string, data: any): Promise<T>;
}
