"""
Override default Django settings for a particular instance.

Copy this file to settings_local.py and modify as appropriate. This file will
be imported into settings.py last of all so settings in this file override any
defaults specified in settings.py.
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Django - general settings
# Uncomment and specify for production deployments
# DEBUG = False
# STATIC_ROOT = "/var/www/path/to/sitename/static/"
# ALLOWED_HOSTS = ['production.hostname']

# Django - database settings
# MySQL - to use MySQL, uncomment and specify the settings
# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.mysql',
#         'NAME': '...',
#         'HOST': '...',
#         'USER': '...',
#         'PASSWORD': '...',
#         'OPTIONS': {
#             'init_command': 'SET default_storage_engine=INNODB,collation_connection=utf8_bin',
#         }
# }

# Django - Email settings
# Uncomment and specify the following for sending emails (default email backend
# just prints to the console)
# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# EMAIL_HOST = '...'
# EMAIL_PORT = '...'
# EMAIL_HOST_USER = '...'
# EMAIL_HOST_PASSWORD = '...'
# EMAIL_USE_TLS = True
# ADMINS receive error emails
# ADMINS = [('Admin Name', 'admin@example.com')]
# Optional: PORTAL_ADMINS receive administrative emails, like when a new user is created
# This can be set to a different value than ADMINS so that the PORTAL_ADMINS
# don't receive error emails. Defaults to the same value as ADMINS.
# PORTAL_ADMINS = ADMINS
# SERVER_EMAIL = 'portal@example.com'

# Keycloak Configuration
KEYCLOAK_CLIENT_ID = '...'
KEYCLOAK_CLIENT_SECRET = '...'
KEYCLOAK_AUTHORIZE_URL = '...'
KEYCLOAK_TOKEN_URL = '...'
KEYCLOAK_USERINFO_URL = '...'
KEYCLOAK_LOGOUT_URL = '...'
# Optional: specify if using self-signed certificate or certificate from unrecognized CA
#KEYCLOAK_CA_CERTFILE = os.path.join(BASE_DIR, "django_airavata", "resources", "incommon_rsa_server_ca.pem")
KEYCLOAK_VERIFY_SSL = True

AUTHENTICATION_OPTIONS = {
    # Control whether username/password authentication is allowed
    'password': {
        'name': 'your account',
        # Uncomment following to hide username/password login except from directly going to /auth/login-password URL
        # 'hidden': True,
    },
    # Can have multiple external logins
    # 'external': [
    #     {
    #         'idp_alias': 'cilogon',
    #         'name': 'CILogon',
    #     }
    # ]
}

# Airavata API Configuration
GATEWAY_ID = 'default'
AIRAVATA_API_HOST = 'localhost'
AIRAVATA_API_PORT = 8930
AIRAVATA_API_SECURE = False
FILE_UPLOAD_TEMP_DIR = '/tmp'

USER_STORAGES = {
    'default': {
        'BACKEND': 'airavata_django_portal_sdk.user_storage.backends.DjangoFileSystemProvider',
        'STORAGE_RESOURCE_ID': '...',
        'OPTIONS': {
            'directory': '/tmp/experiment-data-dir',
        }
    },
    # Or for MFT integration
    #     'default': {
    #         'BACKEND': 'airavata_django_portal_sdk.user_storage.backends.MFTUserStorageProvider',
    #         'STORAGE_RESOURCE_ID': '...',
    #         'OPTIONS': {
    #             'resource_token': 'local-ssh-cred',
    #             'mft_api_endpoint': 'localhost:7004',
    #             'resource_per_gateway': True,
    #             'base_resource_path': '...'
    #         }
    #     }
}

# Define shared directories. Each entry is symlinked into the user's storage.
# GATEWAY_DATA_SHARED_DIRECTORIES = {
#     'Display Name': {
#         'path': '/path/to/shared/dir'
#     }
# }

# Profile Service Configuration
PROFILE_SERVICE_HOST = AIRAVATA_API_HOST
PROFILE_SERVICE_PORT = 8962
PROFILE_SERVICE_SECURE = False


# Portal settings
PORTAL_TITLE = 'Django Airavata Gateway'

# Tus upload - uncomment the following to enable tus uploads
# Override and set to a valid tus endpoint
# TUS_ENDPOINT = "https://tus.domainname.org/files/"
# Override and set to the directory where tus uploads will be stored.
# TUS_DATA_DIR = "/path/to/tus-temp-dir"

# Legacy (PGA) Portal link - uncomment to provide a link to the legacy portal
# PGA_URL = '...'

# Google Analytics Tracking ID ("UA-XXXXXXXX-X"). If this setting is set, then
# Google Analytics tracking will be added to all pages.
# GOOGLE_ANALYTICS_TRACKING_ID = '...'

# Logging configuration. Uncomment following to override default log configuration
# LOGGING = {
#     'version': 1,
#     'disable_existing_loggers': False,
#     'filters': {
#         'require_debug_false': {
#             '()': 'django.utils.log.RequireDebugFalse',
#         },
#         'require_debug_true': {
#             '()': 'django.utils.log.RequireDebugTrue',
#         },
#     },
#     'formatters': {
#         'verbose': {
#             'format': '[%(asctime)s %(name)s:%(lineno)d %(levelname)s] %(message)s'
#         },
#     },
#     'handlers': {
#         'console': {
#             'class': 'logging.StreamHandler',
#             'formatter': 'verbose'
#         },
#         'mail_admins': {
#             'filters': ['require_debug_false'],
#             'level': 'ERROR',
#             'class': 'django.utils.log.AdminEmailHandler',
#             'include_html': True,
#         }
#     },
#     'loggers': {
#         'django_airavata': {
#             'handlers': ['console', 'mail_admins'],
#             'level': 'DEBUG' if DEBUG else 'INFO'
#         },
#         'root': {
#             'handlers': ['console', 'mail_admins'],
#             'level': 'WARNING'
#         }
#     },
# }
