/* 
 * 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 'package:flutter_svg/flutter_svg.dart';
import '../../pages/generic/single_field_edit_view.dart';
import '../../themes/stack_colors.dart';
import '../../utilities/assets.dart';
import '../../utilities/text_styles.dart';
import '../../utilities/util.dart';
import '../desktop/desktop_dialog.dart';
import '../icon_widgets/pencil_icon.dart';
import 'package:tuple/tuple.dart';

class SimpleEditButton extends StatelessWidget {
  const SimpleEditButton({
    super.key,
    this.editValue,
    this.editLabel,
    this.overrideTitle,
    this.disableIcon = false,
    this.onValueChanged,
    this.onPressedOverride,
  }) : assert(
          (editLabel != null && editValue != null && onValueChanged != null) ||
              (editLabel == null &&
                  editValue == null &&
                  onValueChanged == null &&
                  onPressedOverride != null),
        );

  final String? editValue;
  final String? editLabel;
  final String? overrideTitle;
  final bool disableIcon;
  final void Function(String)? onValueChanged;
  final VoidCallback? onPressedOverride;

  @override
  Widget build(BuildContext context) {
    if (Util.isDesktop) {
      return SizedBox(
        height: 26,
        width: 26,
        child: RawMaterialButton(
          fillColor:
              Theme.of(context).extension<StackColors>()!.buttonBackSecondary,
          elevation: 0,
          hoverElevation: 0,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(6),
          ),
          onPressed: onPressedOverride ??
              () async {
                final result = await showDialog<String?>(
                  context: context,
                  builder: (context) {
                    return DesktopDialog(
                      maxWidth: 580,
                      maxHeight: 300,
                      child: SingleFieldEditView(
                        initialValue: editValue!,
                        label: editLabel!,
                      ),
                    );
                  },
                );
                if (result is String && result != editValue!) {
                  onValueChanged?.call(result);
                }
              },
          child: Padding(
            padding: const EdgeInsets.all(5),
            child: PencilIcon(
              width: 16,
              height: 16,
              color: Theme.of(context).extension<StackColors>()!.textDark,
            ),
          ),
        ),
      );
    } else {
      return GestureDetector(
        onTap: onPressedOverride ??
            () async {
              final result = await Navigator.of(context).pushNamed(
                SingleFieldEditView.routeName,
                arguments: Tuple2(
                  editValue!,
                  editLabel!,
                ),
              );
              if (result is String && result != editValue!) {
                onValueChanged?.call(result);
              }
            },
        child: Row(
          children: [
            if (!disableIcon)
              SvgPicture.asset(
                Assets.svg.pencil,
                width: 10,
                height: 10,
                color:
                    Theme.of(context).extension<StackColors>()!.infoItemIcons,
              ),
            if (!disableIcon)
              const SizedBox(
                width: 4,
              ),
            Text(
              overrideTitle ?? "Edit",
              style: STextStyles.link2(context),
            ),
          ],
        ),
      );
    }
  }
}