import 'package:nextcloud/src/api/core.openapi.dart';
import 'package:nextcloud/src/api/news.openapi.dart';
import 'package:nextcloud/src/api/notes.openapi.dart';
import 'package:version/version.dart';

/// Version of core/Server supported
const coreSupportedVersion = 27;

/// API version of the news app supported
const newsSupportedVersion = 'v1-3';

/// API version of the notes app supported
const notesSupportedVersion = 1;

// ignore: public_member_api_docs
extension CoreVersionSupported on CoreClient {
  /// Check if the core/Server version is supported by this client
  ///
  /// Also returns the supported version number
  (bool, int) isSupported(final CoreOcsGetCapabilitiesResponse200ApplicationJson_Ocs_Data capabilities) => (
        capabilities.version.major == coreSupportedVersion,
        coreSupportedVersion,
      );
}

// ignore: public_member_api_docs
extension CoreStatusVersionSupported on CoreStatus {
  /// Check if the core/Server version is supported
  bool get isSupported => version.startsWith('$coreSupportedVersion.');
}

// ignore: public_member_api_docs
extension NewsVersionSupported on NewsClient {
  /// Check if the news app version is supported by this client
  ///
  /// Also returns the supported API version number
  Future<(bool, String)> isSupported() async {
    final versions = await getSupportedApiVersions();
    return (
      versions.apiLevels!.contains(newsSupportedVersion),
      newsSupportedVersion,
    );
  }
}

// ignore: public_member_api_docs
extension NotesVersionSupported on NotesClient {
  /// Check if the notes app version is supported by this client
  ///
  /// Also returns the supported API version number
  (bool, int) isSupported(final CoreOcsGetCapabilitiesResponse200ApplicationJson_Ocs_Data capabilities) => (
        capabilities.capabilities.notesCapabilities?.notes.apiVersion
                ?.map(Version.parse)
                .where((final version) => version.major == notesSupportedVersion)
                .isNotEmpty ??
            false,
        notesSupportedVersion,
      );
}