import 'package:flutter/material.dart';
import 'package:mobile/controllers/session.dart';
import 'package:mobile/models/receipt.dart';
import 'package:mobile/results.dart';
import 'package:mobile/server/server.dart';

class ReceiptHeaderController extends ChangeNotifier {
  List<ReceiptHeader> _receiptHeaders = [];

  final Server server;

  final SessionController sessionController;

  ReceiptHeaderController(
      {required this.server, required this.sessionController}) {
    fetchReceiptsFromServer();
  }

  Future<void> fetchReceiptsFromServer() async {
    final res = await sessionController.requestWithSession(
        (Server server, String token) => server.allReceipts(token));

    switch (res) {
      case Ok<List<ReceiptHeader>, String>(value: final receiptHeaders):
        _receiptHeaders = receiptHeaders;
      case Err<List<ReceiptHeader>, String>():
        break;
    }
    notifyListeners();
  }

  List<ReceiptHeader> receiptHeadersSortedByDate() {
    List<ReceiptHeader> clonedReceiptHeaders = [];
    for (var i = 0; i < _receiptHeaders.length; i++) {
      clonedReceiptHeaders.add(_receiptHeaders[i]);
    }
    clonedReceiptHeaders.sort((a, b) => b.timestamp.compareTo(a.timestamp));
    return clonedReceiptHeaders;
  }
}