import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:url_launcher/url_launcher.dart';

import '../../../about/internal/application/TextType.dart';
import '../../../designs/Responsive.dart';
import '../../../designs/buttons/Buttons.dart';
import '../../../designs/text/Text.dart';
import '../../../utils/Colors.dart';
import 'ConnectUpdateMe.dart';
import 'UpdateMe.dart';
import 'ViewUpdateMe.dart';

class UpdateMeState extends State<UpdateMe> implements ConnectUpdateMe {
  ViewUpdateMe? _model;

  @override
  Widget build(BuildContext context) {
    return ViewModelBuilder<ViewUpdateMe>.reactive(
      viewModelBuilder: () => ViewUpdateMe(context, this),
      onViewModelReady: (viewModel) {
        _model = viewModel;
        _initiate();
      },
      builder: (context, viewModel, child) => PopScope(
        canPop: false,
        child: Scaffold(
          backgroundColor: colorPrimaryDark,
          body: LayoutBuilder(
            builder: (BuildContext context, BoxConstraints constraints) {
              return Responsive(
                mobile: _mobileView(constraints),
                tablet: _mobileView(constraints),
                desktop: _mobileView(constraints),
              );
            },
          ),
        ),
      ),
    );
  }

  void _initiate() {}

  void _onUpdate() {
    _model?.openStore();
  }

  Widget _mobileView(BoxConstraints constraints) {
    return SafeArea(
      child: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 28, vertical: 32),
        child: Column(
          mainAxisSize: MainAxisSize.max,
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            text("GROUNDED", 10, TextType.Bold,
                color: colorWhite.withValues(alpha: 0.45), letterSpacing: 2.0),
            Column(
              mainAxisSize: MainAxisSize.min,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Container(
                  width: 60,
                  height: 60,
                  alignment: Alignment.center,
                  decoration: BoxDecoration(
                    color: colorWhite.withValues(alpha: 0.10),
                    borderRadius: BorderRadius.circular(18),
                  ),
                  child: Icon(CupertinoIcons.arrow_up_circle_fill,
                      size: 24, color: colorWhite),
                ),
                const SizedBox(height: 28),
                text("UPDATE REQUIRED", 10, TextType.Bold,
                    color: colorWhite.withValues(alpha: 0.45),
                    letterSpacing: 1.2),
                const SizedBox(height: 10),
                text("This version is out of date.", 34, TextType.Light,
                    color: colorWhite, height: 1.15),
                const SizedBox(height: 14),
                text(
                  "Update to continue. Your commitments, debt and history are on the server and will be waiting.",
                  14,
                  TextType.Regular,
                  color: colorWhite.withValues(alpha: 0.60),
                  height: 1.55,
                ),
              ],
            ),
            SizedBox(
              width: double.infinity,
              child: roundedCornerButton(
                "Update now",
                _onUpdate,
                background: colorWhite,
                foreground: colorPrimaryDark,
                icon: CupertinoIcons.cloud_download_fill,
              ),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void onStoreOpened() async {
    final Uri store = Uri.parse("https://grounded.app/download");
    if (await canLaunchUrl(store)) {
      await launchUrl(store, mode: LaunchMode.externalApplication);
    }
  }
}
