using GMCabsDriverAssistant.Models;
using GMCabsDriverAssistant.Services;
using GMCabsDriverAssistant.Utils;
using Plugin.FirebasePushNotification;
using Sentry;

namespace GMCabsDriverAssistantSolution.Views;

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SplashPage : ContentPage
{
    public SplashPage()
    {
        InitializeComponent();
    }

    [Obsolete]
    protected async override void OnAppearing()
    {
        base.OnAppearing();

        var checkFcmToken = Preferences.Get("FcmToken", "");
        var token = Preferences.Get(SecureStorageData.Token, "");        
        if (Device.RuntimePlatform != Device.iOS)
        {
            DependencyService.Resolve<INotificationChannelService>().ManageNotificationChannelService();
        }

        if (string.IsNullOrWhiteSpace(checkFcmToken) || string.IsNullOrWhiteSpace(token))
        {
            await Shell.Current.GoToAsync($"//{nameof(LoginPage)}");
        }
        else
        {
            var userCode = Preferences.Get("UserCode", null);
            if (!string.IsNullOrWhiteSpace(userCode))
            {
                SentrySdk.ConfigureScope(scope =>
                {
                    scope.User = new User
                    {
                        Id = userCode.ToString()
                    };
                });
            }
            GMCabsDriverService gmCabsDriverService = new GMCabsDriverService();
            var imeiNumber = Preferences.Get("imeiNumber", null);
            var carNumber = Preferences.Get("carNumber", null);
            var fcmToken = CrossFirebasePushNotification.Current.Token;
            ValidateTokenResponseDto validateTokenResponseDto = new ValidateTokenResponseDto();
            validateTokenResponseDto = await gmCabsDriverService.ValidateAuthToken(token, fcmToken);
            var isTablet = Preferences.Get("IsTablet", false);
            if (Device.RuntimePlatform == Device.Android && isTablet && !string.IsNullOrWhiteSpace(imeiNumber) && !string.IsNullOrWhiteSpace(carNumber))
            {
                validateTokenResponseDto.CanAcceptBookings = true;
                validateTokenResponseDto.CanUpdateLicence = false;
                validateTokenResponseDto.CanScanVouchers = false;
                validateTokenResponseDto.CanViewCoupons = false;
                validateTokenResponseDto.CanViewSettings = false;
                validateTokenResponseDto.CanViewHome = false;
                validateTokenResponseDto.CanViewJobHistory = true;
                Preferences.Set(SecureStorageData.CanAcceptBookings, validateTokenResponseDto.CanAcceptBookings);
                Preferences.Set(SecureStorageData.CanUpdateLicence, validateTokenResponseDto.CanUpdateLicence);
                Preferences.Set(SecureStorageData.CanScanVouchers, validateTokenResponseDto.CanScanVouchers);
                Preferences.Set(SecureStorageData.CanViewCoupons, validateTokenResponseDto.CanViewCoupons);
                Preferences.Set(SecureStorageData.CanViewSettings, validateTokenResponseDto.CanViewSettings);
                Preferences.Set(SecureStorageData.CanViewHome, validateTokenResponseDto.CanViewHome);
                Preferences.Set(SecureStorageData.CanViewJobHistory, validateTokenResponseDto.CanViewJobHistory);
            }
            else
            {
                //validateTokenResponseDto.CanAcceptBookings = true;
                //validateTokenResponseDto.CanUpdateLicence = true;
                //validateTokenResponseDto.CanScanVouchers = true;
                //validateTokenResponseDto.CanViewCoupons = true;
                //validateTokenResponseDto.CanViewSettings = true;
                //validateTokenResponseDto.CanViewHome = true;
                //validateTokenResponseDto.CanViewJobHistory = false;
                Preferences.Set(SecureStorageData.CanAcceptBookings, validateTokenResponseDto.CanAcceptBookings);
                Preferences.Set(SecureStorageData.CanUpdateLicence, validateTokenResponseDto.CanUpdateLicence);
                Preferences.Set(SecureStorageData.CanScanVouchers, validateTokenResponseDto.CanScanVouchers);
                Preferences.Set(SecureStorageData.CanViewCoupons, validateTokenResponseDto.CanViewCoupons);
                Preferences.Set(SecureStorageData.CanViewSettings, validateTokenResponseDto.CanViewSettings);
                Preferences.Set(SecureStorageData.CanViewHome, validateTokenResponseDto.CanViewHome);
                Preferences.Set(SecureStorageData.CanViewJobHistory, validateTokenResponseDto.CanViewJobHistory);
            }
            if (validateTokenResponseDto.Result)
            {
                Preferences.Set("FcmToken", fcmToken.ToString());
                if (Device.RuntimePlatform == Device.Android && isTablet && !string.IsNullOrWhiteSpace(imeiNumber) && !string.IsNullOrWhiteSpace(carNumber))
                {
                    //await Shell.Current.GoToAsync($"//{nameof(HomePageTablet)}?{nameof(HomePageTabletViewModel.IsBookingConfirmed)}={false}");
                    IsBusy = false;
                }
                else
                {
                    IsBusy = false;
                    await Shell.Current.GoToAsync($"//{nameof(HomePage)}");
                    //await Shell.Current.GoToAsync(nameof(HomePage));
                }
            }
            else
            {
                var lastLatitude = Convert.ToDouble(Preferences.Get("lastLat", "0"));
                var lastLongitude = Convert.ToDouble(Preferences.Get("lastLng", "0"));
                await gmCabsDriverService.LogoutDriverApp(token, lastLatitude, lastLongitude);
                await Shell.Current.GoToAsync($"//{nameof(LoginPage)}");
            }
        }
    }
}