# -*- coding: utf-8 -*-
"""
Django settings for oknardia project.

Generated by 'django-admin startproject' using Django 4.1.1.

For more information on this file, see
https://docs.djangoproject.com/en/4.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""

from pathlib import Path
import environ


def _env_admins(raw_items: list[str]) -> tuple[tuple[str, str], ...]:
    # Формат: "Имя1:email1,Имя2:email2"
    admins: list[tuple[str, str]] = []
    for item in raw_items:
        if ":" not in item:
            continue
        admin_name, admin_email = item.split(":", maxsplit=1)
        admin_name = admin_name.strip()
        admin_email = admin_email.strip()
        if admin_name and admin_email:
            admins.append((admin_name, admin_email))
    return tuple(admins)

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
PROJECT_ROOT = BASE_DIR.parent
PUBLIC_ROOT = PROJECT_ROOT / 'public'
STATIC_SOURCE_ROOT = PUBLIC_ROOT / 'static'

env = environ.Env()
environ.Env.read_env(str(PROJECT_ROOT / '.env'))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env(
    'DJANGO_SECRET_KEY',
    default='django-insecure-pd&1$j6z*1w#(j*16b+(@@#&2)+@x^^ot4)zqt-e67*1+$^qch',
)

# SECURITY WARNING: don't run with debug turned on in production!
# ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: не работайте в режиме DEBUG в продашене!
DEBUG = TEMPLATE_DEBUG = env.bool('DEBUG', default=False)

ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['127.0.0.1', 'localhost'])

# Настройки сообщений об ошибках когда все упало и т.п.
ADMINS = _env_admins(env.list('ADMINS', default=[]))


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'django.contrib.humanize',
    'django.contrib.sitemaps',

    'oknardia.apps.OknardiaConfig',
    'web.apps.WebConfig',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# Разрешенные IP для отладки (нужно для django-debug-toolbar).
INTERNAL_IPS = env.list('INTERNAL_IPS', default=['127.0.0.1', 'localhost'])

if DEBUG:
    INSTALLED_APPS += ['debug_toolbar']
    MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware', *MIDDLEWARE]

ROOT_URLCONF = 'oknardia.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            # 'libraries': {
            #     'filter': 'app.templatetags.templatetag',
            # }
        },
    },
]

WSGI_APPLICATION = 'oknardia.wsgi.application'

# Валидаторы Password
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
    {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', },
    {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', },
    {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', },
    {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', },
]



# Internationalization
# https://docs.djangoproject.com/en/4.1/topics/i18n/
LANGUAGE_CODE = 'ru-RU'
TIME_ZONE = 'Europe/Moscow'
USE_I18N = True
USE_TZ = True
FIRST_DAY_OF_WEEK = 1            # 1'st day week -- monday
SHORT_DATE_FORMAT = 'Y-m-d'
SHORT_DATETIME_FORMAT = 'Y-m-d H:i:s'
DATETIME_FORMAT = 'Y-m-d H:i:s'

# Статические файлы (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/

STATIC_URL = '/static/'
MEDIA_URL = '/media/'


MEDIA_ROOT = str(PUBLIC_ROOT / 'media')
# STATIC_ROOT отделен от исходной статики, чтобы избежать staticfiles.E002.
STATIC_ROOT = str(PUBLIC_ROOT / 'static_collected')

# Базовый URL сайта нужен для абсолютных URL в sitemap.xml.
SITE_BASE_URL = env('SITE_BASE_URL', default='https://oknardia.ru').rstrip('/')
# Файлы sitemap храним в media-volume, чтобы переживали пересоздание контейнера.
SITEMAP_SUBDIR = env('SITEMAP_SUBDIR', default='_serv_sitemap').strip('/ ')
SITEMAP_ROOT = str(Path(MEDIA_ROOT) / SITEMAP_SUBDIR)
SITEMAP_URL_PREFIX = f"{MEDIA_URL.rstrip('/')}/{SITEMAP_SUBDIR}"
SITEMAP_INDEX_URL = f"{SITE_BASE_URL}{SITEMAP_URL_PREFIX}/sitemap.xml"

# Каталоги, откуда Django читает исходную статику в DEBUG-режиме.
STATICFILES_DIRS = [
    str(STATIC_SOURCE_ROOT)
] if STATIC_SOURCE_ROOT.is_dir() else []

# Путь к каталогу static для генерации кэш-файлов и служебных JS.
STATIC_BASE_PATH = str(STATIC_SOURCE_ROOT)

database_engine = env('DATABASE_ENGINE', default='django.db.backends.sqlite3')
if database_engine == 'django.db.backends.sqlite3':
    # Для SQLite принимаем только имя файла из env и кладем БД в PROJECT_ROOT/database.
    sqlite_db_filename = Path(env('DATABASE_NAME', default='oknadria.sqlite3')).name
    sqlite_db_path = PROJECT_ROOT / 'database' / sqlite_db_filename
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': str(sqlite_db_path),
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': database_engine,
            'HOST': env('DATABASE_HOST', default='localhost'),
            'PORT': env('DATABASE_PORT', default='3306'),
            'NAME': env('DATABASE_NAME', default=''),
            'USER': env('DATABASE_USER', default=''),
            'PASSWORD': env('DATABASE_PASSWORD', default=''),
        }
    }

TOUCH_RELOAD = env('TOUCH_RELOAD', default='')

#########################################
# настройки для почтового сервера (они одинаковые для DEV и PROD)
EMAIL_BACKEND = env(
    'EMAIL_BACKEND',
    default='django.core.mail.backends.smtp.EmailBackend',
)
EMAIL_HOST = env('EMAIL_HOST', default='localhost')
EMAIL_PORT = env.int('EMAIL_PORT', default=25)
EMAIL_HOST_USER = env('EMAIL_HOST_USER', default='')
EMAIL_HOST_PASSWORD = env('EMAIL_HOST_PASSWORD', default='')
EMAIL_USE_TLS = env.bool('EMAIL_USE_TLS', default=True)
EMAIL_USE_SSL = env.bool('EMAIL_USE_SSL', default=False)
DEFAULT_FROM_EMAIL = env('DEFAULT_FROM_EMAIL', default=EMAIL_HOST_USER)
SERVER_EMAIL = env('SERVER_EMAIL', default=DEFAULT_FROM_EMAIL)
EMAIL_SUBJECT_PREFIX = 'OKNARDIA ERR: '     # префикс для оповещений об ошибках и необработанных исключениях

SECURE_SSL_REDIRECT = env.bool('SECURE_SSL_REDIRECT', default=False)
SESSION_COOKIE_SECURE = env.bool('SESSION_COOKIE_SECURE', default=False)
CSRF_COOKIE_SECURE = env.bool('CSRF_COOKIE_SECURE', default=False)


# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

# ключи для Google Captha
CAPTCHA_PUBLIC_KEY = env('CAPTCHA_PUBLIC_KEY', default='')
CAPTCHA_PRIVATE_KEY = env('CAPTCHA_PRIVATE_KEY', default='')

# если непонятно какая серия выбрана через каталог (finger fix) выбираем серию типового строения:
DEFAULT_SERIA_ID_FOR_CATALOG = 843 # СЕРИЯ 1-515/9 -- дом в котором я живу

# количество коммерческих предложений во фрейме отчета
OFFER_PER_FRAME = 5
OFFER_PER_FRAME_FOR_ONE_FLAP = 10
# папка для хранения изображений
PATH_FOR_IMG = "img"
PATH_FOR_IMG_BLOG = "img_for_blog/"
PATH_FOR_IMG_AVATAR = "img_avatar/"
PATH_FOR_IMG_LOGOS = "logos_img/"
PATH_FOR_IMG_APARTMENT = "img_apart/"
PATH_FOR_IMG_SERIA = "img_seria/"

# папка для хранения мини-картинок со схемами открывания внутри PATH_FOR_IMG
PATH_FOR_BIGIMGFLAPCONFIG = "_flap.cfg"
PATH_FOR_IMGFLAPCONFIG = "_miniflap.cfg"

PATH_FOR_JS = "js"
PATH_FOR_JS_MAP = "js/4maps"
SUFFIX_FOR_JS_MAP = "_seria_on_map.js"
SUFFIX_FOR_MINI_JS_MAP = "_seria_on_map.mini.js"
PATH_FOR_SERIA_INFO_HTML_INCLUDE = "seria_info/prepared/"

# переменные
# высота картинки
PICT_H = 500
# высота картинки (без обводки)
PICT_MINIH = 18
# ширина строки на мини картинке (без обводки)
PICT_MINWI = 9
# для рейтинга
RARING_STAR = 5                 # ЗВЕЗДОЧЕК В РЕЙТИНГЕ
RARING_SET_MAX = 5.0            # МАКСИМАЛЬНЫЙ РЕЙТИНГ НАБОРА
RARING_SET_MIN = 0.0            # МИНИМАЛЬНЫЙ РЕЙТИНГ НАБОРА
RARING_GLAZING_MAX = 5.0
RARING_GLAZING_MIN = 0.0
RARING_PVC_PROFILE_MAX = 5.0
RARING_PVC_PROFILE_MIN = 0.0
RARING_WEIGHT_PVC_PROFILE_IN_SET = 1.5  # сколько рейтинга (зведочек) набора составляет профиль
RARING_WEIGHT_GLAZING_IN_SET = 1.5      # сколько рейтинга (зведочек) набора составляет стеклопакет
# веса ранкинга (веса ранжирования)
RANK_STEP_SET_MODIFY = 0.75             # Дата последнего обновления цены набора
RANK_STEP_SET_DELIVERY = 2              # Доставка включена в стоимость
RANK_STEP_SET_UNINSTALL_INSTALL = 2     # Демонтаж/Монтаж включен в стоимость
RANK_STEP_SET_SILL = 1.5                # Подоконник включен в стоимость
RANK_STEP_SET_PANES = 1.5               # Водоотлив включен в стоимость
RANK_STEP_SET_SLOPE = 1.5               # Откос включен в стоимость
RANK_STEP_SET_CLIMATE_CONTROL = 0.5     # Климат-контроль включен в стоимость
RANK_STEP_SET_NUM_OFFER = 0.1           # Число предложений включен в стоимость
RANK_STEP_DISCOUNT_FLEX = 1             # Гибкость скидок (число шагов скидки)
RANK_STEP_DISCOUNT_MAX = 1              # Размер скидки (максимальная скидка)
RANK_GLAZ_SOUNDPROOFING = 1.0           # Шумоизоляция СТЕКЛОПАКЕТА
RANK_GLAZ_HEAT_TRANSFER = 1.0           # Теплопередача СТЕКЛОПАКЕТА
RANK_GLAZ_LIGHT_TRANSMISSION = 0.25     # Коэффициент светопропускания СТЕКЛОПАКЕТА
RANK_GLAZ_PASSING_SUN = 0.15            # Коэффициент солнцепропускания СТЕКЛОПАКЕТА
RANK_GLAZ_THICKNESS = 0.1               # Толщина СТЕКЛОПАКЕТА
RANK_GLAZ_CAMERAS_NUM = 0.1             # Число камер СТЕКЛОПАКЕТА
RANK_GLAZ_CAMERAS_NUM_NAME=u"Число камер"
RANK_PVCP_SOUNDPROOFING = 1.0           # Шумоизоляция ПРОФИЛЯ
RANK_PVCP_SOUNDPROOFING_NAME = u"Шумоизоляция"
RANK_PVCP_HEAT_TRANSFER = 1.0           # Теплопередача ПРОФИЛЯ
RANK_PVCP_HEAT_TRANSFER_NAME = u"Теплопередача"
RANK_PVCP_HEIGHT = 0.3                  # Высота в световом проеме ПРОФИЛЯ
RANK_PVCP_HEIGHT_NAME = u"Высота в проёме"
RANK_PVCP_RABBET = 0.2                  # Высота фальца ПРОФИЛЯ
RANK_PVCP_RABBET_NAME = u"Фальц"
RANK_PVCP_G_THICKNESS = 0.2             # Максимальная толщина стеклопакета ПРОФИЛЯ
RANK_PVCP_G_THICKNESS_NAME = u"Толщина стеклопакета"
RANK_PVCP_THICKNESS = 0.2               # Монтажная ширина ПРОФИЛЯ
RANK_PVCP_THICKNESS_NAME = u"Толщина профиля"
RANK_PVCP_SEALS = 1.2                   # Контуров уплотненения ПРОФИЛЯ
RANK_PVCP_SEALS_NAME = u"Уплотнители"
RANK_PVCP_CAMERAS_NUM = 0.1             # Число камер ПРОФИЛЯ
RANK_PVCP_CAMERAS_NUM_NAME = u"Число камер"
RANK_PVCP_CAMERAS_POPULARITY_NAME = u"Популярность"
# бля блогов
NUM_BLOG_TIZER_IN_PAGE = 5              # дисто тизеров (анонсов) блогов на страничке
NUM_PAGE_IN_PAGINATOR = 3               # чисто отображаемых страничек в педжинаторе
# Унифицированные именования ключей для JSON-объектов
KEY_URL = "url"
KEY_NOTE = "note"
KEY_RATING = "RATING"
KEY_RATING_VIRTUAL = "RATING_V"
KEY_DICSOUNT = "%"
KEY_HTML = "html"
# KEY_RATING_VIRTUAL = "reting_v"
# Типы карточек каталога
CATALOG_RECORD_FOR_PROFILE_MODEL = 1
CATALOG_RECORD_FOR_PROFILE_MANUFACTURER = 100
CATALOG_SORTER_MAGIC_NUMBER_ADV = 5
CATALOG_SORTER_MAGIC_NUMBER_TIZER = 1

MAX_LEN_RING_LOG_BUFFER = 250  # МАКСИМАЛЬНЫЙ РАЗМЕР КОЛЬЦЕВОГО БУФЕРА

YANDEX_MAPS_API_KEY = env('YANDEX_MAPS_API_KEY', default='')
