using Serilog.Events;
using System;
using System.Threading;
using TINK.Model.Connector;
using TINK.Model.Device;
using TINK.Services.BluetoothLock;
using TINK.Model.Services.CopriApi.ServerUris;
using TINK.Settings;
using TINK.ViewModel.Map;
using TINK.ViewModel.Settings;
using TINK.Services;
using TINK.Model.Station;
using System.Collections.Generic;
namespace TINK.Model
{
public interface ITinkApp
{
/// Update connector from depending on whether user is logged in or not.
void UpdateConnector();
/// Saves object to file.
void Save();
/// Holds the filter which is applied on the map view. Either TINK or Konrad stations are displayed.
IGroupFilterMapPage GroupFilterMapPage { get; set; }
/// Holds the user of the app.
User.User ActiveUser { get; }
/// Sets flag whats new page was already shown to true.
void SetWhatsNewWasShown();
/// Holds the system to copri.
IFilteredConnector GetConnector(bool isConnected);
/// Name of the station which is selected.
IStation SelectedStation { get; set; }
/// Polling periode.
PollingParameters Polling { get; set; }
TimeSpan ExpiresAfter { get; set; }
/// Holds status about whants new page.
WhatsNew WhatsNew { get; }
/// Gets whether device is connected to internet or not.
bool GetIsConnected();
/// Action to post to GUI thread.
Action PostAction { get; }
/// Holds the uri which is applied after restart.
Uri NextActiveUri { get; set; }
/// Holds the filters loaded from settings.
IGroupFilterSettings FilterGroupSetting { get; set; }
/// Value indicating whether map is centerted to current position or not.
bool CenterMapToCurrentLocation { get; set; }
/// Holds the map area to display.
Xamarin.Forms.GoogleMaps.MapSpan MapSpan { get; set; }
bool LogToExternalFolder { get; set; }
bool IsSiteCachingOn { get; set; }
/// Gets the minimum logging level.
LogEventLevel MinimumLogEventLevel { get; set; }
/// Gets a value indicating whether reporting level is verbose or not.
bool IsReportLevelVerbose { get; set; }
/// Updates logging level.
/// New level to set.
void UpdateLoggingLevel(LogEventLevel p_oNewLevel);
/// Holds uris of copri servers.
CopriServerUriList Uris { get; }
/// Holds the different lock service implementations.
LocksServicesContainerMutable LocksServices { get; }
/// Holds available app themes.
ServicesContainerMutable