# Django settings for orchestra project.

DEBUG = False
TEMPLATE_DEBUG = DEBUG

# Enable persistent connections
CONN_MAX_AGE = 60*10

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'UTC'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

MEDIA_URL = '/media/'

ALLOWED_HOSTS = '*'

# Set this to True to wrap each HTTP request in a transaction on this database.
ATOMIC_REQUESTS = True

MIDDLEWARE_CLASSES = (
    'django.middleware.gzip.GZipMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'orchestra.core.caches.RequestCacheMiddleware',
    'orchestra.apps.orchestration.middlewares.OperationsMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)


TEMPLATE_CONTEXT_PROCESSORS =(
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.contrib.messages.context_processors.messages",
    "django.core.context_processors.request",
    "orchestra.core.context_processors.site",
)


INSTALLED_APPS = (
    # django-orchestra apps
    'orchestra',
    'orchestra.apps.orchestration',
    'orchestra.apps.domains',
    'orchestra.apps.users',
#    'orchestra.apps.users.roles.mail',
    'orchestra.apps.users.roles.jabber',
    'orchestra.apps.users.roles.posix',
    'orchestra.apps.mails',
    'orchestra.apps.lists',
    'orchestra.apps.webapps',
    'orchestra.apps.websites',
    'orchestra.apps.databases',
    'orchestra.apps.vps',
    'orchestra.apps.saas',
    'orchestra.apps.issues',
    'orchestra.apps.services',
    'orchestra.apps.orders',
    'orchestra.apps.miscellaneous',
    'orchestra.apps.bills',
    'orchestra.apps.payments',
    
    # Third-party apps
    'django_extensions',
    'djcelery',
    'djcelery_email',
    'fluent_dashboard',
    'admin_tools',
    'admin_tools.theming',
    'admin_tools.menu',
    'admin_tools.dashboard',
    'rest_framework',
    'rest_framework.authtoken',
    'passlib.ext.django',
    'django_nose',
    
    # Django.contrib
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    
    'orchestra.apps.accounts',
    'orchestra.apps.contacts',
    'orchestra.apps.resources',
)


AUTH_USER_MODEL = 'users.User'


AUTHENTICATION_BACKENDS = [
    'orchestra.permissions.auth.OrchestraPermissionBackend',
    'django.contrib.auth.backends.ModelBackend',
]


#TODO  Email config
#EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'


#################################
## 3RD PARTY APPS CONIGURATION ##
#################################

# Admin Tools
ADMIN_TOOLS_MENU = 'orchestra.admin.menu.OrchestraMenu'

# Fluent dashboard
# TODO subclass like in admin_tools_menu
ADMIN_TOOLS_INDEX_DASHBOARD = 'fluent_dashboard.dashboard.FluentIndexDashboard'
FLUENT_DASHBOARD_ICON_THEME = '../orchestra/icons'

FLUENT_DASHBOARD_APP_GROUPS = (
    # Services group is generated by orchestra.admin.dashboard
    ('Accounts', {
        'models': (
            'orchestra.apps.accounts.models.Account',
            'orchestra.apps.contacts.models.Contact',
            'orchestra.apps.users.models.User',
            'orchestra.apps.orders.models.Order',
            'orchestra.apps.services.models.ContractedPlan',
            'orchestra.apps.bills.models.Bill',
#            'orchestra.apps.payments.models.PaymentSource',
            'orchestra.apps.payments.models.Transaction',
            'orchestra.apps.issues.models.Ticket',
        ),
        'collapsible': True,
    }),
    ('Administration', {
        'models': (
            'djcelery.models.TaskState',
            'orchestra.apps.orchestration.models.Route',
            'orchestra.apps.orchestration.models.BackendLog',
            'orchestra.apps.orchestration.models.Server',
            'orchestra.apps.resources.models.Resource',
            'orchestra.apps.resources.models.Monitor',
            'orchestra.apps.services.models.Service',
            'orchestra.apps.services.models.Plan',
        ),
        'collapsible': True,
    }),
)

FLUENT_DASHBOARD_APP_ICONS = {
    # Services
    'webs/web': 'web.png',
    'mail/address': 'X-office-address-book.png',
    'mails/mailbox': 'email.png',
    'mails/address': 'X-office-address-book.png',
    'lists/list': 'email-alter.png',
    'domains/domain': 'domain.png',
    'multitenance/tenant': 'apps.png',
    'webapps/webapp': 'Applications-other.png',
    'websites/website': 'Applications-internet.png',
    'databases/database': 'database.png',
    'databases/databaseuser': 'postgresql.png',
    'vps/vps': 'TuxBox.png',
    'miscellaneous/miscellaneous': 'applications-other.png',
    'saas/saas': 'saas.png',
    # Accounts
    'accounts/account': 'Face-monkey.png',
    'contacts/contact': 'contact_book.png',
    'orders/order': 'basket.png',
    'services/contractedplan': 'Pack.png',
    'services/service': 'price.png',
    'bills/bill': 'invoice.png',
    'payments/paymentsource': 'card_in_use.png',
    'payments/transaction': 'transaction.png',
    'issues/ticket': 'Ticket_star.png',
    # Administration
    'users/user': 'Mr-potato.png',
    'djcelery/taskstate': 'taskstate.png',
    'orchestration/server': 'vps.png',
    'orchestration/route': 'hal.png',
    'orchestration/backendlog': 'scriptlog.png',
    'resources/resource': "gauge.png",
    'resources/monitor': "Utilities-system-monitor.png",
    'services/plan': 'Pack.png',
}

# Django-celery
import djcelery
djcelery.setup_loader()
# Broker
BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_SEND_EVENTS = True
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_DISABLE_RATE_LIMITS = True
# Do not fill the logs with crap
CELERY_REDIRECT_STDOUTS_LEVEL = 'DEBUG'


# rest_framework
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'orchestra.permissions.api.OrchestraPermissionBackend',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_FILTER_BACKENDS': (
        ('rest_framework.filters.DjangoFilterBackend',)
    ),
}


# Use a UNIX compatible hash
PASSLIB_CONFIG = (
    "[passlib]\n"
    "schemes = sha512_crypt, django_pbkdf2_sha256, django_pbkdf2_sha1,"
    "        django_bcrypt, django_bcrypt_sha256, django_salted_sha1, des_crypt,"
    "        django_salted_md5, django_des_crypt, hex_md5, bcrypt, phpass\n"
    "default = sha512_crypt\n"
    "deprecated = django_pbkdf2_sha1, django_salted_sha1, django_salted_md5,"
    "        django_des_crypt, des_crypt, hex_md5\n"
    "all__vary_rounds = 0.05\n"
    "django_pbkdf2_sha256__min_rounds = 10000\n"
    "sha512_crypt__min_rounds = 80000\n"
    "staff__django_pbkdf2_sha256__default_rounds = 12500\n"
    "staff__sha512_crypt__default_rounds = 100000\n"
    "superuser__django_pbkdf2_sha256__default_rounds = 15000\n"
    "superuser__sha512_crypt__default_rounds = 120000\n"
)


TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'