# Defaults for development, do not use in production!
DEBUG = True

# Name of this instance
API_SERVER_NAME = "dev"

# Prefix which is prepended to paths (which are saved in the database) before they are provided by the api
# Must include the last /
FILE_PATH_PREFIX = "https://video.fsmpi.rwth-aachen.de/files/"

# Used for all cookies
# While the frontend and api are on different subdomains, that still counts as 'same-site'
COOKIES_SAMESITE = "strict"
COOKIES_SECURE = False
COOKIES_DOMAIN = ".video.fsmpi.rwth-aachen.de"

# These are flask's options for the session cookie
SESSION_COOKIE_SAMESITE = COOKIES_SAMESITE
SESSION_COOKIE_SECURE = COOKIES_SECURE
SESSION_COOKIE_DOMAIN = COOKIES_DOMAIN

# Used by flask to sign the cookies
SECRET_KEY = "something random"

# Scheduler should only be disabled for unit tests
DISABLE_SCHEDULER = False

DB_DATA = "../config/db_example_data.sql"
DB_CONNECTIONS = {
    # Maximum amount of concurrent open connections
    "max_count": 10,
    # How many connections should be readonly. Only relevant if readonly cannot be set per transaction (only applies to
    #   sqlite right now)
    "readonly_percent": 0.75,
    # Maximum time to wait for a free connection (An API request will probably fail if this times out)
    "max_wait_time_sec": 10,
    # Maximum amount of transaction requests which may wait concurrently. More incoming requests will fail immediately
    "max_waiting_count": 25,
    # Maximum amount of attempts for a read transaction if there are conflicts between the transactions
    "max_read_attempts": 2,
    # Maximum amount of attempts for a write transaction if there are conflicts between the transactions
    "max_write_attempts": 2
}

# DB_ENGINE = "mysql"
MYSQL = {
    "host": "10.0.0.101",
    "port": 43045,
    "user": "video",
    "password": "video",
    "database": "video_ag_test",
    #  "unix_socket": "/var/run/mysqld/mysqld.sock"
}

#  DB_ENGINE = "postgres"
POSTGRES = {
    "host": "10.0.0.101",
    "port": 5432,
    "user": "videoag",
    "password": "",
    "database": "videoag"
}

DB_ENGINE = "sqlite"
SQLITE = {
    "file": "db.sqlite",
    "schema": "../config/db_schema_sqlite.sql",
    "init_schema": True,
    "init_data": True
}

# This is host based. It uses a simple counter. For example for a window size of one hour, every hour the specified
#   amount of requests can be made
# Limits are checked and updated in the order specified. Short limits should be checked first (Otherwise the
#   longer limit is used up by request which have been blocked by the shorter limit)
# id is used in diagnostics
API_GLOBAL_RATE_LIMIT = [
    {
        "id": "short",
        "window_size_seconds": 60,
        "max_request_count": 60
    },
    {
        "id": "long",
        "window_size_seconds": 60 * 60,
        "max_request_count": 600
    }
]

# Works the same as global but used for authentication requests
API_AUTH_RATE_LIMIT = [
    {
        "id": "short",
        "window_size_seconds": 10 * 60,
        "max_request_count": 8
    },
    {
        "id": "long",
        "window_size_seconds": 4 * 60 * 60,
        "max_request_count": 24
    }
]

# Absolute limit. If there are already 32 chapters (visible or not visible), no more suggestions are accepted
API_CHAPTER_SUGGESTIONS_LIMIT_PER_LECTURE = 32
# This is NOT host based but globally. It uses a sliding window. For example for a window size of 24 hours, no more than
# the specified amount of requests can be made in last 24 hours. The interval size specifies how often the window 'slides'
API_CHAPTER_SUGGESTIONS_RATE_LIMIT = {
    "window_size_seconds": 24 * 60 * 60,
    "interval_size_seconds": 10 * 60,
    "max_request_count": 600
}

DEFAULT_CACHE_CONTROL_MAX_AGE_SECONDS = 5 * 60

API_DIAGNOSTICS_HISTORY_SIZE_MINUTES = 7 * 24 * 60
API_DIAGNOSTICS_INTERVAL_SIZE_MINUTES = 30

LIVE_CONFIG_UPDATE_INTERVAL_SECONDS = 60

#  LDAP_HOST = "auth.fsmpi.rwth-aachen.de"
LDAP_PORT = 636
LDAP_GROUPS = ["fachschaft"]

#  RWTH_API_KEY = ""

RWTH_IP_RANGES = ["134.130.0.0/16", "137.226.0.0/16", "134.61.0.0/16", "192.35.229.0/24", "2a00:8a60::/32"]
FSMPI_IP_RANGES = ["137.226.35.192/29", "137.226.75.0/27", "137.226.127.32/27", "137.226.231.192/26", "134.130.102.0/26", "127.0.0.1/32"]
INTERNAL_IP_RANGES = ["127.0.0.0/8", "192.168.155.0/24", "fd78:4d90:6fe4::/48"]

# Only for debugging. In percent, from 0 to 100. With this you need luck to make a request
#  API_ROULETTE_MODE = 0