import 'accountData.dart';

enum EndpointMode {
  live,
  stage,
}

class EndpointOptions {
  Endpoint live;
  Endpoint? staged;
  EndpointOptions({required this.live, required this.staged});

  Endpoint get(EndpointMode mode) {
    if(staged == null || mode == EndpointMode.live) return live;
    return staged!;
  }
}

class Endpoint {
  String domain;
  String path;

  Endpoint({required this.domain, this.path = ""});

  String full() {
    return domain + path;
  }
}

class EndpointData {
  static final EndpointData _instance = EndpointData._construct();

  factory EndpointData() {
    return _instance;
  }

  EndpointData._construct();

  EndpointMode getEndpointMode() {
    late String existingName;
    existingName = AccountData().getUsername();
    return existingName.startsWith("google") ? EndpointMode.stage : EndpointMode.live;
  }

  Endpoint webuntis() {
    return EndpointOptions(
      live: Endpoint(
        domain: "peleus.webuntis.com",
      ),
      staged: Endpoint(
        domain: "mhsl.eu",
        path: "/marianum/marianummobile/webuntis/public/index.php/api"
      ),
    ).get(getEndpointMode());
  }

  Endpoint nextcloud() {
    return EndpointOptions(
      live: Endpoint(
        domain: "cloud.marianum-fulda.de",
      ),
      staged: Endpoint(
        domain: "mhsl.eu",
        path: "/marianum/marianummobile/cloud",
      )
    ).get(getEndpointMode());
  }

}