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() => domain + path;
}

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

  factory EndpointData() => _instance;

  EndpointData._construct();

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

  Endpoint webuntis() => EndpointOptions(
      live: Endpoint(
        domain: 'peleus.webuntis.com',
      ),
      staged: Endpoint(
        domain: 'mhsl.eu',
        path: '/marianum/marianummobile/webuntis/public/index.php/api'
      ),
    ).get(getEndpointMode());

  Endpoint nextcloud() => EndpointOptions(
      live: Endpoint(
        domain: 'cloud.marianum-fulda.de',
      ),
      staged: Endpoint(
        domain: 'mhsl.eu',
        path: '/marianum/marianummobile/cloud',
      )
    ).get(getEndpointMode());

}