enum PlatformHTTPMethod { get, post }

abstract class PlatformPlayerStatisticRecord {
  /// Тип счетчика, определяет логику по которой будет запрашиваться счетчик.
  /// Может быть несколько счетчиков с одинаковым типом, в этом случае их нужно запросить все.
  String get name;
  /// Ссылка для запроса счетчика.
  /// Может содержать набор динамических параметров.
  /// Ссылка может быть указана как относительная, без явного указания протокола (http/https).
  /// В этом случае при запросе ссылки протокол нужно будет добавить.
  String get urlTemplate;
  /// Время в секундах когда нужно запросить счетчик во время проигрывания основного видео.
  double get start;
  /// Время в секундах между запросами счетчика во время проигрывания основного видео.
  double get delay;
  /// Максимальное кол-во запросов счетчика во время проигрывания основного видео.
  int get count;
  /// Метод запроса счетчика статистики.
  PlatformHTTPMethod get method;
  /// Содержимое запроса в случае отправки запроса через post.
  /// Может содержать набор динамических параметров.
  String? get body;

  String toJson() {
    final rawBody = body;
    final String bodyValue;
    if (rawBody == null) {
      bodyValue = "";
    } else {
      bodyValue = rawBody.isEmpty ? "" : rawBody.replaceAll('"', '\\\"');
    }
    return '{"name": "$name", "urlTemplate": "$urlTemplate", "start": $start, "delay": $delay, "count": $count, "method": "${method == PlatformHTTPMethod.get ? 'get' : 'post'}", "body": "$bodyValue"}';
  }
}