/* 
 * 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 'package:flutter/material.dart';
import '../../utilities/text_styles.dart';
import '../../utilities/util.dart';
import '../desktop/desktop_dialog.dart';
import '../desktop/desktop_dialog_close_button.dart';
import '../stack_dialog.dart';

class BasicDialog extends StatelessWidget {
  const BasicDialog({
    super.key,
    this.leftButton,
    this.rightButton,
    this.icon,
    required this.title,
    this.message,
    this.desktopHeight = 474,
    this.desktopWidth = 641,
    this.canPopWithBackButton = false,
    this.flex = false,
  });

  final Widget? leftButton;
  final Widget? rightButton;

  final Widget? icon;

  final String title;
  final String? message;

  final double? desktopHeight;
  final double desktopWidth;

  final bool canPopWithBackButton;

  final bool flex;

  @override
  Widget build(BuildContext context) {
    final isDesktop = Util.isDesktop;

    if (isDesktop) {
      return DesktopDialog(
        maxHeight: desktopHeight,
        maxWidth: desktopWidth,
        child: Column(
          children: [
            Padding(
              padding: const EdgeInsets.only(left: 32),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Text(
                    title,
                    style: STextStyles.desktopH3(context),
                  ),
                  const DesktopDialogCloseButton(),
                ],
              ),
            ),
            if (flex)
              const Spacer(
                flex: 2,
              ),
            if (message != null)
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 32),
                child: Text(
                  message!,
                  style: STextStyles.desktopTextSmall(context),
                ),
              ),
            if (flex)
              const Spacer(
                flex: 3,
              ),
            if (leftButton != null || rightButton != null)
              const SizedBox(
                height: 32,
              ),
            if (leftButton != null || rightButton != null)
              Padding(
                padding: const EdgeInsets.all(32),
                child: Row(
                  children: [
                    leftButton != null
                        ? Expanded(child: leftButton!)
                        : const Spacer(),
                    const SizedBox(
                      width: 16,
                    ),
                    rightButton != null
                        ? Expanded(child: rightButton!)
                        : const Spacer(),
                  ],
                ),
              ),
          ],
        ),
      );
    } else {
      return WillPopScope(
        onWillPop: () async {
          return canPopWithBackButton;
        },
        child: StackDialog(
          title: title,
          leftButton: leftButton,
          rightButton: rightButton,
          icon: icon,
          message: message,
        ),
      );
    }
  }
}