import 'package:comwell_key_app/base/base_cubit.dart';
import 'package:comwell_key_app/common/const.dart';

import 'package:in_app_update/in_app_update.dart';
import 'package:url_launcher/url_launcher.dart';

part 'force_update_state.dart';

class ForceUpdateCubit extends BaseCubit<ForceUpdateState> {
  ForceUpdateCubit() : super(ForceUpdateState.initial());

  Future<void> startAndroidUpdate() async {
    safeEmit(state.copyWith(isLoading: true, error: null));
    try {
      final result = await InAppUpdate.checkForUpdate();
      if (result.updateAvailability == UpdateAvailability.updateAvailable) {
        await InAppUpdate.performImmediateUpdate();
      } else {
        safeEmit(state.copyWith(error: 'No update available.'));
      }
    } catch (e, st) {
      logError(e, st);
      safeEmit(state.copyWith(error: 'Failed to update: $e'));
    } finally {
      safeEmit(state.copyWith(isLoading: false));
    }
  }

  Future<void> openAppStore() async {
    safeEmit(state.copyWith(isLoading: true, error: null));
    //TODO: Add app store url to CONSTS
    if (await canLaunchUrl(Uri.parse(AppStoreConstants.appStoreUrl))) {
      await launchUrl(Uri.parse(AppStoreConstants.appStoreUrl), mode: LaunchMode.externalApplication);
    } else {
      safeEmit(state.copyWith(error: 'Could not open App Store.'));
    }
    safeEmit(state.copyWith(isLoading: false));
  }
}