using System.Threading.Tasks;
using Plugins.Countly.Helpers;
using Plugins.Countly.Models;
namespace Plugins.Countly.Services
{
public interface IUserDetailsCountlyService
{
///
/// Modifies all user data. Custom data should be json string.
/// Deletes an already defined custom property from the Countly server, if it is supplied with a NULL value
///
///
///
Task UserDetailsAsync(CountlyUserDetailsModel userDetails);
///
/// Modifies custom user data only. Custom data should be json string.
/// Deletes an already defined custom property from the Countly server, if it is supplied with a NULL value
///
///
///
Task UserCustomDetailsAsync(CountlyUserDetailsModel userDetails);
///
/// Uploads all user details
///
///
Task SetUserDetailsAsync(CountlyUserDetailsModel userDetailsModel);
///
/// Uploads only custom data. Doesn't update any other property except Custom Data.
///
///
Task SetCustomUserDetailsAsync(CountlyUserDetailsModel userDetailsModel);
///
/// Saves all custom user data updates done since the last save request.
///
///
Task SaveAsync();
///
/// Sets value to key.
/// Doesn't report it to the server until save is called.
///
///
///
void Set(string key, string value);
///
/// Sets value to key, only if property was not defined before for this user.
/// Doesn't report it to the server until save is called.
///
///
///
void SetOnce(string key, string value);
///
/// To increment value, for the specified key, on the server by 1.
/// Doesn't report it to the server until save is called.
///
///
void Increment(string key);
///
/// To increment value on server by provided value (if no value on server, assumes it is 0).
/// Doesn't report it to the server until save is called.
///
///
///
void IncrementBy(string key, double value);
///
/// To multiply value on server by provided value (if no value on server, assumes it is 0).
/// Doesn't report it to the server until save is called.
///
///
///
void Multiply(string key, double value);
///
/// To store maximal value from the one on server and provided value (if no value on server, uses provided value).
/// Doesn't report it to the server until save is called.
///
///
///
void Max(string key, double value);
///
/// To store minimal value from the one on server and provided value (if no value on server, uses provided value).
/// Doesn't report it to the server until save is called.
///
///
///
void Min(string key, double value);
///
/// Add one or many values to array property (can have multiple same values, if property is not array, converts it to array).
/// Doesn't report it to the server until save is called.
///
///
///
void Push(string key, string[] value);
///
/// Add one or many values to array property (will only store unique values in array, if property is not array, converts it to array).
/// Doesn't report it to the server until save is called.
///
///
///
void PushUnique(string key, string[] value);
///
/// Remove one or many values from array property (only removes value from array properties).
/// Doesn't report it to the server until save is called.
///
///
///
void Pull(string key, string[] value);
void AddToCustomData(string key, object value);
}
}