#ifndef PROFILE_HPP_INCLUDED
#define PROFILE_HPP_INCLUDED

#include "../../Core/Types/Timer.hpp"
#include <cstdint>
#include <string>

namespace Profile
{
    std::string GetUsername();
    std::string GetPassword();
    std::string GetBankPin();
    std::int32_t GetWorld();
    void SetWorld(std::int32_t World);

    bool GetIsMember();

    std::int32_t GetInteractableMean();
    double GetInteractableDeviation();

    std::int32_t GetMoveMean();
    double GetMoveDeviation();

    std::int32_t GetMouseDownMean();
    double GetMouseDownDeviation();

    std::int32_t GetMouseUpMean();
    double GetMouseUpDeviation();

    std::int32_t GetKeyDownMean();
    double GetKeyDownDeviation();

    std::int32_t GetKeyUpMean();
    double GetKeyUpDeviation();

    std::int32_t GetScrollAmount();
    double GetScrollAmountDeviation();
    std::int32_t GetScrollGapMean();
    double GetScrollGapDeviation();
    std::int32_t GetScrollDelayMean();
    double GetScrollDelayDeviation();

    double GetStandardDeviationX();
    double GetStandardDeviationY();

    double GetBoxProbabilityX();
    double GetBoxProbabilityY();

    double GetConvexProbabilityX();
    double GetConvexProbabilityY();

    double GetItemProbabilityX();
    double GetItemProbabilityY();

    double GetMenuProbabilityX();
    double GetMenuProbabilityY();

    double GetWidgetProbabilityX();
    double GetWidgetProbabilityY();

    double GetPointGenAccuracy();

    double GetAccelerationMean();
    double GetAccelerationDeviation();
    double GetDecelerationMean();
    double GetDecelerationDeviation();
    double GetPivotMean();
    double GetPivotDeviation();
    double GetSplineMean();
    double GetSplineDeviation();
    double GetAngleMean();
    double GetAngleDeviation();

    double GetFatigue();
    double GetFatigueGain();
    double GetFatigueLoss();
    double GetFatigueMax();

    bool GetMiniBreakEnabled();
    double GetMiniBreakEvery();
    double GetMiniBreakEveryDeviation();
    double GetMiniBreakFor();
    double GetMiniBreakForDeviation();

    bool GetShortBreakEnabled();
    double GetShortBreakEvery();
    double GetShortBreakEveryDeviation();
    double GetShortBreakFor();
    double GetShortBreakForDeviation();

    bool GetLongBreakEnabled();
    double GetLongBreakEvery();
    double GetLongBreakEveryDeviation();
    double GetLongBreakFor();
    double GetLongBreakForDeviation();

    bool UseProxy();
    std::string GetProxyHost();
    std::string GetProxyPort();
    std::string GetProxyUsername();
    std::string GetProxyPassword();

    void SetRawInteractableMean(std::int32_t Mean);
    std::int32_t GetRawInteractableMean();
    void SetRawInteractableDeviation(double Deviation);
    double GetRawInteractableDeviation();

    void SetRawMoveMean(std::int32_t Mean);
    std::int32_t GetRawMoveMean();
    void SetRawMoveDeviation(double Deviation);
    double GetRawMoveDeviation();

    void SetRawMouseDownMean(std::int32_t Mean);
    std::int32_t GetRawMouseDownMean();
    void SetRawMouseDownDeviation(double Deviation);
    double GetRawMouseDownDeviation();

    void SetRawMouseUpMean(std::int32_t Mean);
    std::int32_t GetRawMouseUpMean();
    void SetRawMouseUpDeviation(double Deviation);
    double GetRawMouseUpDeviation();

    void SetRawKeyDownMean(std::int32_t Mean);
    std::int32_t GetRawKeyDownMean();
    void SetRawKeyDownDeviation(double Deviation);
    double GetRawKeyDownDeviation();

    void SetRawKeyUpMean(std::int32_t Mean);
    std::int32_t GetRawKeyUpMean();
    void SetRawKeyUpDeviation(double Deviation);
    double GetRawKeyUpDeviation();

    void SetPointGenAccuracy(double Accuracy);

}

#endif // PROFILE_HPP_INCLUDED
