import '../../api/apiResponse.dart';
import '../../api/marianumcloud/webdav/queries/listFiles/listFilesCache.dart';
import '../../api/marianumcloud/webdav/queries/listFiles/listFilesResponse.dart';
import '../dataHolder.dart';

extension ExtendedList on List {
  T indexOrNull<T>(int index) =>  index +1 <= length ? this[index] : null;
  T firstOrNull<T>() => isEmpty ? null : first;
  T lastOrNull<T>() => isEmpty ? null : last;
}

class FilesProps extends DataHolder {
  List<String> folderPath = List<String>.empty(growable: true);
  String currentFolderName = 'Home';

  ListFilesResponse? _listFilesResponse;
  ListFilesResponse get listFilesResponse => _listFilesResponse!;

  void runPath(List<String> path) {
    folderPath = path;
    run();
  }

  @override
  List<ApiResponse?> properties() => [_listFilesResponse];

  @override
  void run() {
    _listFilesResponse = null;
    notifyListeners();
    ListFilesCache(
      path: folderPath.isEmpty ? '/' : folderPath.join('/'),
      onUpdate: (ListFilesResponse data) => {
        _listFilesResponse = data,
        notifyListeners(),
      }
    );
  }

  void enterFolder(String name) {
    folderPath.add(name);
    currentFolderName = name;
    run();
  }

  void popFolder() {
    folderPath.removeLast();
    if(folderPath.isEmpty) currentFolderName = 'Home';
    run();
  }
}