import 'dart:async';
import 'package:mobx/mobx.dart';
import 'package:hive/hive.dart';
import 'package:cake_wallet/entities/template.dart';

part 'send_template_store.g.dart';

class SendTemplateStore = SendTemplateBase with _$SendTemplateStore;

abstract class SendTemplateBase with Store {
  SendTemplateBase({required this.templateSource})
  : templates = ObservableList<Template>() {
    update();
  }

  @observable
  ObservableList<Template> templates;

  Box<Template> templateSource;

  @action
  void update() =>
      templates.replaceRange(0, templates.length, templateSource.values.toList());

  @action
  Future<void> addTemplate(
      {required String name,
      required bool isCurrencySelected,
      required String address,
      required String cryptoCurrency,
      required String fiatCurrency,
      required String amount,
      required String amountFiat,
      required List<Template> additionalRecipients}) async {
    final template = Template(
        nameRaw: name,
        isCurrencySelectedRaw: isCurrencySelected,
        addressRaw: address,
        cryptoCurrencyRaw: cryptoCurrency,
        fiatCurrencyRaw: fiatCurrency,
        amountRaw: amount,
        amountFiatRaw: amountFiat,
        additionalRecipientsRaw: additionalRecipients);
    await templateSource.add(template);
  }

  @action
  Future<void> remove({required Template template}) async => await template.delete();
}