# pylint: disable=wildcard-import, unused-wildcard-import
import os

from oscar.defaults import *  # noqa

# Path helper
location = lambda x: os.path.join(os.path.dirname(os.path.realpath(__file__)), x)

ALLOWED_HOSTS = ["test", ".oscarcommerce.com"]

DATABASES = {
    "default": {
        "ENGINE": os.environ.get("DATABASE_ENGINE", "django.db.backends.postgresql"),
        "NAME": os.environ.get("DATABASE_NAME", "oscar"),
        "USER": os.environ.get("DATABASE_USER", None),
        "PASSWORD": os.environ.get("DATABASE_PASSWORD", None),
        "HOST": os.environ.get("DATABASE_HOST", ""),
        "PORT": os.environ.get("DATABASE_PORT", 5432),
    }
}

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.staticfiles",
    "django.contrib.sites",
    "django.contrib.flatpages",
    "oscar.config.Shop",
    "oscar.apps.analytics.apps.AnalyticsConfig",
    "oscar.apps.checkout.apps.CheckoutConfig",
    "oscar.apps.address.apps.AddressConfig",
    "oscar.apps.shipping.apps.ShippingConfig",
    "oscar.apps.catalogue.apps.CatalogueConfig",
    "oscar.apps.catalogue.reviews.apps.CatalogueReviewsConfig",
    "oscar.apps.communication.apps.CommunicationConfig",
    "oscar.apps.partner.apps.PartnerConfig",
    "oscar.apps.basket.apps.BasketConfig",
    "oscar.apps.payment.apps.PaymentConfig",
    "oscar.apps.offer.apps.OfferConfig",
    "oscar.apps.order.apps.OrderConfig",
    "oscar.apps.customer.apps.CustomerConfig",
    "oscar.apps.search.apps.SearchConfig",
    "oscar.apps.voucher.apps.VoucherConfig",
    "oscar.apps.wishlists.apps.WishlistsConfig",
    "oscar.apps.dashboard.apps.DashboardConfig",
    "oscar.apps.dashboard.reports.apps.ReportsDashboardConfig",
    "oscar.apps.dashboard.users.apps.UsersDashboardConfig",
    "oscar.apps.dashboard.orders.apps.OrdersDashboardConfig",
    "oscar.apps.dashboard.catalogue.apps.CatalogueDashboardConfig",
    "oscar.apps.dashboard.offers.apps.OffersDashboardConfig",
    "oscar.apps.dashboard.partners.apps.PartnersDashboardConfig",
    "oscar.apps.dashboard.pages.apps.PagesDashboardConfig",
    "oscar.apps.dashboard.ranges.apps.RangesDashboardConfig",
    "oscar.apps.dashboard.reviews.apps.ReviewsDashboardConfig",
    "oscar.apps.dashboard.vouchers.apps.VouchersDashboardConfig",
    "oscar.apps.dashboard.communications.apps.CommunicationsDashboardConfig",
    "oscar.apps.dashboard.shipping.apps.ShippingDashboardConfig",
    # 3rd-party apps that oscar depends on
    "widget_tweaks",
    "haystack",
    "treebeard",
    "sorl.thumbnail",
    "easy_thumbnails",
    "django_tables2",
    # Contains models we need for testing
    "tests._site.model_tests_app",
    "tests._site.myauth",
]

# Use a custom partner app to test overriding models. I can't find a way of
# doing this on a per-test basis, so I'm using a global change.
partner_app_idx = INSTALLED_APPS.index("oscar.apps.partner.apps.PartnerConfig")
INSTALLED_APPS[partner_app_idx] = "tests._site.apps.partner.apps.PartnerConfig"
customer_app_idx = INSTALLED_APPS.index("oscar.apps.customer.apps.CustomerConfig")
INSTALLED_APPS[customer_app_idx] = "tests._site.apps.customer.apps.CustomerConfig"
catalogue_app_idx = INSTALLED_APPS.index("oscar.apps.catalogue.apps.CatalogueConfig")
INSTALLED_APPS[catalogue_app_idx] = "tests._site.apps.catalogue.apps.CatalogueConfig"
dashboard_app_idx = INSTALLED_APPS.index("oscar.apps.dashboard.apps.DashboardConfig")
INSTALLED_APPS[dashboard_app_idx] = "tests._site.apps.dashboard.apps.DashboardConfig"
checkout_app_idx = INSTALLED_APPS.index("oscar.apps.checkout.apps.CheckoutConfig")
INSTALLED_APPS[checkout_app_idx] = "tests._site.apps.checkout.apps.CheckoutConfig"

AUTH_USER_MODEL = "myauth.User"

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [
            location("_site/templates"),
        ],
        "OPTIONS": {
            "loaders": [
                (
                    "django.template.loaders.cached.Loader",
                    [
                        "django.template.loaders.filesystem.Loader",
                        "django.template.loaders.app_directories.Loader",
                    ],
                ),
            ],
            "context_processors": [
                "django.contrib.auth.context_processors.auth",
                "django.template.context_processors.request",
                "django.template.context_processors.debug",
                "django.template.context_processors.i18n",
                "django.template.context_processors.media",
                "django.template.context_processors.static",
                "django.contrib.messages.context_processors.messages",
                "oscar.apps.search.context_processors.search_form",
                "oscar.apps.communication.notifications.context_processors.notifications",
                "oscar.apps.checkout.context_processors.checkout",
                "oscar.core.context_processors.metadata",
            ],
        },
    }
]


MIDDLEWARE = [
    "django.middleware.common.CommonMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "oscar.apps.basket.middleware.BasketMiddleware",
]


AUTHENTICATION_BACKENDS = (
    "oscar.apps.customer.auth_backends.EmailBackend",
    "django.contrib.auth.backends.ModelBackend",
)

AUTH_PASSWORD_VALIDATORS = [
    {
        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
        "OPTIONS": {
            "min_length": 6,
        },
    },
    {
        "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
    },
]

HAYSTACK_SIGNAL_PROCESSOR = "haystack.signals.RealtimeSignalProcessor"

HAYSTACK_CONNECTIONS = {
    "default": {
        "ENGINE": "haystack.backends.whoosh_backend.WhooshEngine",
        "PATH": location("whoosh_index"),
    },
}

PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"]
ROOT_URLCONF = "tests._site.urls"
LOGIN_REDIRECT_URL = "/accounts/"
STATIC_URL = "/static/"
STATIC_ROOT = location("public/static")
MEDIA_URL = "/media/"
PUBLIC_ROOT = location("public")
MEDIA_ROOT = os.path.join(PUBLIC_ROOT, "media")
DEBUG = False
SITE_ID = 1
USE_TZ = 1
APPEND_SLASH = True
DDF_DEFAULT_DATA_FIXTURE = "tests.dynamic_fixtures.OscarDynamicDataFixtureClass"
SESSION_SERIALIZER = "django.contrib.sessions.serializers.JSONSerializer"
LANGUAGE_CODE = "en-gb"

OSCAR_INITIAL_ORDER_STATUS = "A"
OSCAR_ORDER_STATUS_PIPELINE = {"A": ("B",), "B": ()}
OSCAR_INITIAL_LINE_STATUS = "a"
OSCAR_LINE_STATUS_PIPELINE = {"a": ("b",), "b": ()}

SECRET_KEY = "notverysecret"

TEST_RUNNER = "django.test.runner.DiscoverRunner"
FIXTURE_DIRS = [location("unit/fixtures")]
