import sys
import os

from upstream_settings.base import *
from upstream_settings.mailman import *

# we're in a container, stdout only
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
            },
        },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'stream': sys.stdout,
            'formatter': 'verbose'
            },
        },
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': True,
            },
        },
    }

SECRET_KEY = os.environ.get("SECRET_KEY", "hackme")
# assert len(SECRET_KEY) > 16
ROOT_URLCONF = "urls"

ALLOWED_HOSTS = [
    "localhost",  # Archiving API from Mailman, keep it.
    os.environ.get('WEB_DOMAIN', "lists.hackerspace.pl"),
]

ALLOWED_HOSTS = ["*"] # TODO deleteme

MAILMAN_REST_API_URL = 'http://localhost:8001'
MAILMAN_REST_API_USER = 'restadmin'
MAILMAN_REST_API_PASS = os.environ.get('MAILMAN_REST_API_PASS')
MAILMAN_ARCHIVER_KEY = os.environ.get('MAILMAN_ARCHIVER_KEY')
MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1', '185.236.240.38', "2a0d:eb00:2137:2::10")

DATABASES = {
    'default': {
        # Use 'sqlite3', 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        # DB name or path to database file if using sqlite3.
        'NAME': os.environ.get('DB_NAME', 'mailman-web'),
        # The following settings are not used with sqlite3:
        'USER': os.environ.get('DB_USER', 'mailman'),
        'PASSWORD': os.environ.get('DB_PASS'),
        # HOST: empty for localhost through domain sockets or '127.0.0.1' for
        # localhost through TCP.
        'HOST': os.environ.get('DB_HOST', '127.0.0.1'),
        # PORT: set to empty string for default.
        'PORT': os.environ.get('DB_PORT', ''),
        # OPTIONS: for mysql engine only, do not use with other engines.
        # 'OPTIONS': {'charset': 'utf8mb4'}  # Enable utf8 4-byte encodings.
    }
}

# TODO check this
USE_X_FORWARDED_HOST = True # behind an Ingress

# And if your proxy does your SSL encoding for you, set SECURE_PROXY_SSL_HEADER
# https://docs.djangoproject.com/en/1.8/ref/settings/#secure-proxy-ssl-header
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_SCHEME', 'https')

DEFAULT_FROM_EMAIL = 'postorius@hackerspace.pl'
SERVER_EMAIL = 'bofh@hackerspace.pl'

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = os.environ.get('SMTP_HOST', '127.0.0.1')
EMAIL_PORT = int(os.environ.get('SMTP_PORT', '465'))
EMAIL_HOST_USER = os.environ.get('SMTP_USER', 'postorius')
EMAIL_HOST_PASSWORD = os.environ.get('SMTP_PASSWORD')
EMAIL_TIMEOUT=3
EMAIL_USE_TLS=True

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
        'PATH': os.environ.get('FULLTEXT_INDEX_PATH', "fulltext_index"),
        # You can also use the Xapian engine, it's faster and more accurate,
        # but requires another library.
        # http://django-haystack.readthedocs.io/en/v2.4.1/installing_search_engines.html#xapian
        # Example configuration for Xapian:
        # 'ENGINE': 'xapian_backend.XapianEngine'
    },
}

# Only display mailing-lists from the same virtual host as the webserver
FILTER_VHOST = False
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.hackerspace.pl'
