package io.delphi.qa.auto.awsmfrw.common_baby;

import org.aeonbits.owner.Config;

@Config.LoadPolicy(Config.LoadType.MERGE)
@Config.Sources({"classpath:props/local.properties"})
public interface EnvConfigs extends Config {

  @Config.Key("delphi.slz.apple.api.host")
  String appleApiHost();

  @Config.Key("delphi.slz.apple.api.port")
  Integer appleApiPort();

  @Config.DefaultValue("100")
  @Config.Key("delphi.slz.downloader.validation.threshold")
  Integer customValidationThreshold();

  @Config.DefaultValue("0")
  @Config.Key("delphi.api.date.end.shift")
  Integer delphiApiEndDateShift();

  @Config.DefaultValue("360")
  @Config.Key("delphi.api.date.start.shift")
  Integer delphiApiStartDateShift();

  @Config.Key("delphi.api.host")
  String delphiApiHostPattern();

  @Config.DefaultValue("localhost")
  @Config.Key("delphi.perf.db.influx.host")
  String perfDbInfluxHost();

  @Config.DefaultValue("influx")
  @Config.Key("delphi.perf.db.influx.name")
  String  perfDbInfluxName();

  @Config.DefaultValue("10")
  @Config.Key("delphi.perf.db.influx.duration")
  String perfTestRunDuration();

  @Config.DefaultValue("debug")
  @Config.Key("delphi.perf.test.run.name")
  String  perfTestRunName();

  @Config.DefaultValue("demo")
  @Config.Key("delphi.perf.app.name")
  String perfAppName();


  @Config.DefaultValue("8086")
  @Config.Key("delphi.perf.db.influx.port")
  String perfDbInfluxPort();

  @Config.DefaultValue("0")
  @Config.Key("delphi.env.run.retry.maxCount")
  String maxRetry();

  @Config.DefaultValue("50")
  @Config.Key("delphi.env.run.dsp.limit")
  String dspLimit();

  @Config.Key("delphi.api.port")
  Integer delphiApiPort();

  @Config.Key("delphi.env.run")
  String env();

  @Config.DefaultValue("false")
  @Config.Key("delphi.slz.db.pg.isAutomation")
  Boolean isAutomationDb();

  @Config.DefaultValue("false")
  @Config.Key("delphi.env.run.type.isLogPretty")
  boolean isLogPretty();

  @Config.DefaultValue("false")
  @Config.Key("delphi.env.run.type.isDeepAssert")
  Boolean isDeepAssert();

  @Config.DefaultValue("false")
  @Config.Key("delphi.env.run.type.isLocal")
  boolean isLocal();

  @Config.DefaultValue("false")
  @Config.Key("delphi.slz.api.dsp.isLocalS3")
  Boolean isLocalS3();

  @DefaultValue("true")
  @Config.Key("delphi.env.run.type.isLogAll")
  boolean isLogAll();

  @Config.Key("delphi.slz.cfg.complete_criteria")
  @Config.DefaultValue("0") // only one required context would be used
  Integer whichCompleteCriteria();

  @Config.DefaultValue("false")
  @Config.Key("delphi.env.isProd")
  Boolean isProd();

  @Config.DefaultValue("3")
  @Config.Key("delphi.slz.report.date.days.shift")
  int reportDaysShift();

  @Config.Key("delphi.slz.spotify.api.auth")
  String spotifyApiAuth();

  @Config.Key("delphi.slz.spotify.api.host.pattern")
  String spotifyApiHostPattern();

  @Config.Key("delphi.bt.instance.pattern")
  String instanceIdPattern();

  @Config.Key("delphi.slz.spotify.api.port")
  int spotifyApiPort();

  @Config.Key("delphi.slz.spotify.api.v1")
  String spotifyApiV1();

  @Config.DefaultValue("UTC")
  @Config.Key("delphi.env.run.timezone")
  String timeZone();
}
