/* 
 * This file is part of Stack Wallet.
 * 
 * Copyright (c) 2023 Cypher Stack
 * All Rights Reserved.
 * The code is distributed under GPLv3 license, see LICENSE file for details.
 * Generated by Cypher Stack on 2023-05-26
 *
 */

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
import 'package:intl/intl.dart';
import '../../models/buy/response_objects/quote.dart';
import 'sub_widgets/buy_warning_popup.dart';
import '../../themes/stack_colors.dart';
import '../../themes/theme_providers.dart';
import '../../utilities/assets.dart';
import '../../utilities/text_styles.dart';
import '../../utilities/util.dart';
import '../../widgets/background.dart';
import '../../widgets/conditional_parent.dart';
import '../../widgets/custom_buttons/app_bar_icon_button.dart';
import '../../widgets/desktop/primary_button.dart';
import '../../widgets/rounded_white_container.dart';

class BuyQuotePreviewView extends ConsumerStatefulWidget {
  const BuyQuotePreviewView({
    super.key,
    required this.quote,
  });

  final SimplexQuote quote;

  static const String routeName = "/buyQuotePreview";

  @override
  ConsumerState<BuyQuotePreviewView> createState() =>
      _BuyQuotePreviewViewState();
}

class _BuyQuotePreviewViewState extends ConsumerState<BuyQuotePreviewView> {
  final isDesktop = Util.isDesktop;

  Future<void> _buyWarning() async {
    await showDialog<void>(
      context: context,
      builder: (context) => BuyWarningPopup(
        quote: widget.quote,
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    final Locale locale = Localizations.localeOf(context);
    final format = NumberFormat.simpleCurrency(locale: locale.toString());
    // See https://stackoverflow.com/a/67055685

    return ConditionalParent(
      condition: !isDesktop,
      builder: (child) {
        return Background(
          child: Scaffold(
            backgroundColor:
                Theme.of(context).extension<StackColors>()!.background,
            appBar: AppBar(
              backgroundColor:
                  Theme.of(context).extension<StackColors>()!.backgroundAppBar,
              leading: const AppBarBackButton(),
              title: Text(
                "Preview quote",
                style: STextStyles.navBarTitle(context),
              ),
            ),
            body: LayoutBuilder(
              builder: (builderContext, constraints) {
                return Padding(
                  padding: const EdgeInsets.only(
                    left: 12,
                    top: 12,
                    right: 12,
                  ),
                  child: SingleChildScrollView(
                    child: ConstrainedBox(
                      constraints: BoxConstraints(
                        minHeight: constraints.maxHeight - 24,
                      ),
                      child: IntrinsicHeight(
                        child: Padding(
                          padding: const EdgeInsets.all(4),
                          child: child,
                        ),
                      ),
                    ),
                  ),
                );
              },
            ),
          ),
        );
      },
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          Text(
            "Buy ${widget.quote.crypto.ticker.toUpperCase()}",
            style: STextStyles.pageTitleH1(context),
          ),
          const SizedBox(
            height: 16,
          ),
          RoundedWhiteContainer(
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text(
                  "You pay",
                  style: STextStyles.label(context),
                ),
                Text(
                  "${format.simpleCurrencySymbol(widget.quote.fiat.ticker.toUpperCase())}${widget.quote.youPayFiatPrice.toStringAsFixed(2)} ${widget.quote.fiat.ticker.toUpperCase()}",
                  style: STextStyles.label(context).copyWith(
                    color: Theme.of(context).extension<StackColors>()!.textDark,
                  ),
                ),
              ],
            ),
          ),
          const SizedBox(
            height: 8,
          ),
          // RoundedWhiteContainer(
          //   child: Row(
          //     mainAxisAlignment: MainAxisAlignment.spaceBetween,
          //     children: [
          //       Text(
          //         "You pay with",
          //         style: STextStyles.label(context),
          //       ),
          //       Text(
          //         widget.quote.fiat.name,
          //         style: STextStyles.label(context).copyWith(
          //           color: Theme.of(context).extension<StackColors>()!.textDark,
          //         ),
          //       ),
          //     ],
          //   ),
          // ),
          // const SizedBox(
          //   height: 8,
          // ),
          RoundedWhiteContainer(
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text(
                  "You receive",
                  style: STextStyles.label(context),
                ),
                Text(
                  "${widget.quote.youReceiveCryptoAmount} ${widget.quote.crypto.ticker.toUpperCase()}",
                  style: STextStyles.label(context).copyWith(
                    color: Theme.of(context).extension<StackColors>()!.textDark,
                  ),
                ),
              ],
            ),
          ),
          const SizedBox(
            height: 8,
          ),
          RoundedWhiteContainer(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(
                  "Receiving ${widget.quote.crypto.ticker.toUpperCase()} address",
                  style: STextStyles.label(context),
                ),
                Text(
                  "${widget.quote.receivingAddress} ",
                  style: STextStyles.label(context).copyWith(
                    color: Theme.of(context).extension<StackColors>()!.textDark,
                  ),
                ),
              ],
            ),
          ),
          const SizedBox(
            height: 8,
          ),
          RoundedWhiteContainer(
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text(
                  "Quote ID",
                  style: STextStyles.label(context),
                ),
                Text(
                  widget.quote.id,
                  style: STextStyles.label(context).copyWith(
                    color: Theme.of(context).extension<StackColors>()!.textDark,
                  ),
                ),
              ],
            ),
          ),
          const SizedBox(
            height: 8,
          ),
          RoundedWhiteContainer(
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text(
                  "Provider",
                  style: STextStyles.label(context),
                ),
                SizedBox(
                  width: 64,
                  height: 32,
                  child: SvgPicture.asset(
                    Assets.buy.simplexLogo(
                      ref.watch(themeProvider).brightness,
                    ),
                  ),
                ),
              ],
            ),
          ),
          const SizedBox(
            height: 8,
          ),
          const Spacer(),
          PrimaryButton(
            label: "Buy",
            onPressed: _buyWarning,
          ),
        ],
      ),
    );
  }
}