import os
from pathlib import Path
from environs import Env
import distutils.util
from datetime import timedelta

env = Env()
env.read_env()
DB_ENGINE = env.str('DB_ENGINE')
DB_USER = env.str('DB_USER')
DB_PASSWORD = env.str('DB_PASSWORD')
DB_HOST = env.str('DB_HOST')
DB_PORT = env.str('DB_PORT')
DB_NAME_nwisefindb = env.str('DB_NAME_nwisefindb')
DB_NAME_narcdb = env.str('DB_NAME_narcdb')
DB_NAME_capitalsdb = env.str('DB_NAME_capitalsdb')
DB_NAME_masterdb = env.str('DB_NAME_masterdb')
DB_NAME_vendordb = env.str('DB_NAME_vendordb')
DB_NAME_memodb = env.str('DB_NAME_memodb')
DB_NAME_tadb = env.str('DB_NAME_tadb')
# DB_NAME_foundation = env.str('DB_NAME_foundation')
# DB_NAME_ias_im = env.str('DB_NAME_ias_im')
DB_NAME_docdb = env.str('DB_NAME_docdb')
DB_NAME_hrmsdb = env.str('DB_NAME_hrmsdb')
# DB_NAME_inwarddb = env.str('DB_NAME_inwarddb')
# DB_NAME_entrydb = env.str('DB_NAME_entrydb')
# DB_NAME_jvdb = env.str('DB_NAME_jvdb')
# DB_NAME_apdb = env.str('DB_NAME_apdb')
# DB_NAME_necf = env.str('DB_NAME_necf')
# DB_NAME_nfa = env.str('DB_NAME_nfa')
DB_NAME_prdb = env.str('DB_NAME_prdb')



micro_userservice = env.str('MICRO_USERSERVICE')
micro_vendorservice = env.str('MICRO_VENDORSERVICE')
micro_masterservice = env.str('MICRO_MASTERSERVICE')
micro_docservice = env.str('MICRO_DOCSERVICE')


# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
#custom_path = '/
#media'

#BASE_DIR = Path(custom_path)

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

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'y_tv8x$kgg-5-g0j-mtl^3iqp^yzs9#!jef+a2x%e2n+5yi!pj'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['*']
CORS_ORIGIN_ALLOW_ALL=True


# Application definition
DEFAULT_AUTO_FIELD='django.db.models.BigAutoField'

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'rest_framework.authtoken',
    'knox',
    # 'configservice',
    # 'userservice',
    # 'memoservice',
    # 'vendorservice',
    # 'masterservice',
    # 'taservice',
    # 'docservice',
    # 'inwardservice',
    # 'ecfservice',
    # 'apservice',
    # 'pprservice',
    # 'entryservice',
    # 'jvservice',
    # 'reportservice',
    # 'faservice',
    # 'cmsservice',
    # 'attendanceservice',
    # 'hrmsservice',
    # 'appraisalservice',
    'payrollservice',
    # 'vowservice',
    # 'prservice',
    # 'taskservice',
    # 'recruitmentservice',
    # 'fetmicroservice',
]

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

ROOT_URLCONF = 'npayroll.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

DEFAULT_AUTHENTICATION_CLASSES: (
    'utilityservice.service.NWisefinAuthentication', # custom authentication cl                                                 ass
    ...
)

WSGI_APPLICATION = 'npayroll.wsgi.application'
MEDIA_ROOT = os.path.join(BASE_DIR)
MEDIA_URL= "media/"
#MEDIA_URL= custom_path
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'


# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': DB_ENGINE,
                'NAME': DB_NAME_nwisefindb,
                'USER': DB_USER,
                'PASSWORD': DB_PASSWORD,
                'PORT': DB_PORT,
                'HOST': DB_HOST
    },
    'narcdb': {
        'ENGINE': DB_ENGINE,
                'NAME':DB_NAME_nwisefindb,
                'USER': DB_USER,
                'PASSWORD': DB_PASSWORD,
                'PORT': DB_PORT,
                'HOST': DB_HOST
    },
    'capitalsdb': {
        'ENGINE': DB_ENGINE,
                'NAME': DB_NAME_nwisefindb,
                'USER': DB_USER,
                'PASSWORD': DB_PASSWORD,
                'PORT': DB_PORT,
                'HOST': DB_HOST
    },
    'masterdb': {
        'ENGINE': DB_ENGINE,
                'NAME': DB_NAME_nwisefindb,
                'USER': DB_USER,
                'PASSWORD': DB_PASSWORD,
                'PORT': DB_PORT,
                'HOST': DB_HOST
    },
    'vendordb': {
        'ENGINE': DB_ENGINE,
                'NAME': DB_NAME_nwisefindb,
                'USER': DB_USER,
                'PASSWORD': DB_PASSWORD,
                'PORT': DB_PORT,
                'HOST': DB_HOST
    },
    'memodb': {
        'ENGINE': DB_ENGINE,
                'NAME': DB_NAME_nwisefindb,
                'USER': DB_USER,
                'PASSWORD': DB_PASSWORD,
                'PORT': DB_PORT,
                'HOST': DB_HOST
    },
    'tadb': {
        'ENGINE': DB_ENGINE,
                'NAME': DB_NAME_nwisefindb,
                'USER': DB_USER,
                'PASSWORD': DB_PASSWORD,
                'PORT': DB_PORT,
                'HOST': DB_HOST
    },
    'docdb': {
        'ENGINE': DB_ENGINE,
                'NAME': DB_NAME_docdb,
                'USER': DB_USER,
                'PASSWORD': DB_PASSWORD,
                'PORT': DB_PORT,
                'HOST': DB_HOST
    },
    'hrmsdb': {
        'ENGINE': DB_ENGINE,
        'NAME': DB_NAME_hrmsdb,
        'USER': DB_USER,
        'PASSWORD': DB_PASSWORD,
        'PORT': DB_PORT,
        'HOST': DB_HOST
    },
    'prdb': {
        'ENGINE': DB_ENGINE,
        'NAME': DB_NAME_prdb,
        'USER': DB_USER,
        'PASSWORD': DB_PASSWORD,
        'PORT': DB_PORT,
        'HOST': DB_HOST
    },
  #   'inwardservice': {
  #       'ENGINE': DB_ENGINE,
  #               'NAME': DB_NAME_inwarddb,
  #               'USER': DB_USER,
  #               'PASSWORD': DB_PASSWORD,
  #               'PORT': DB_PORT,
  #               'HOST': DB_HOST
  #   },
  #   'entry': {
  #       'ENGINE': DB_ENGINE,
  #           'NAME': DB_NAME_entrydb,
  #           'USER': DB_USER,
  #           'PASSWORD': DB_PASSWORD,
  #           'PORT': DB_PORT,
  #           'HOST': DB_HOST
  #   },
  #   'jv': {
  #       'ENGINE': DB_ENGINE,
  #           'NAME': DB_NAME_jvdb,
  #           'USER': DB_USER,
  #           'PASSWORD': DB_PASSWORD,
  #           'PORT': DB_PORT,
  #           'HOST': DB_HOST
  #   },
  #   'ecf': {
  #       'ENGINE': DB_ENGINE,
  #       'NAME': DB_NAME_necf,
  #       'USER': DB_USER,
  #       'PASSWORD': DB_PASSWORD,
  #       'PORT': DB_PORT,
  #       'HOST': DB_HOST
  #   },
  #   'napservice': {
  #       'ENGINE': DB_ENGINE,
  #       'NAME': DB_NAME_apdb,
  #       'USER': DB_USER,
  #       'PASSWORD': DB_PASSWORD,
  #       'PORT': DB_PORT,
  #       'HOST': DB_HOST
  #   },
  #   'faservicedb': {
  #     'ENGINE': DB_ENGINE,
  #     'NAME': DB_NAME_nfa,
  #     'USER': DB_USER,
  #     'PASSWORD': DB_PASSWORD,
  #     'PORT': DB_PORT,
  #     'HOST': DB_HOST
  # }

}


# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarit                                                 yValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator                                                 ',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidato                                                 r',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidat                                                 or',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.1/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/

STATIC_URL = '/static/'
VYSFIN_URL=env.str('WISEFIN_URL')
CLIENT_URL=env.str('APIGEE_URL')
CLIENT_SECRET = env.str('APIGEE_CLIENT_SECRET')
ADURL_KEY =env.str('APIGEE_CLIENT_ID')
BUCKET_NAME_FOR_ASSETS =env.str('APPLICATION_ASSET_BUCKET_NAME')

import logging
log_path = '/var/www/FinalPayroll/logs/app.custom.out.stderr.log'
logger = logging.getLogger(__name__)
logging.basicConfig(filename=log_path,
                       format='%(asctime)s -%(levelname)s - %(message)s',
                      level=logging.INFO)

#APPLICATION_BE_URL= env.str('APPLICATION_BE_URL')
#APPLICATION_URL = env.str("APPLICATION_URL")
#CMS_BE_URL= env.str('CMS_BE_URL')
#SERVER_IP=APPLICATION_BE_URL


APPLICATION_BE_URL = env.str('APPLICATION_BE_URL')
try:
    APPLICATION_URL = env.str("APPLICATION_URL")
except:
    print('application_url gone wrong')
try:
    EOW_URL = env.str('EOW_URL')
except:
    print('eow_url gone wrong')

CMS_BE_URL= env.str('CMS_BE_URL')
SERVER_IP=APPLICATION_BE_URL

PAYROLL_TEST = env.str('PAYROLL_TEST')
try:
    PAYROLL_TEST = env.str('PAYROLL_TEST')
    logger.info('------PAYROLL_TEST---------'+ str(PAYROLL_TEST))
except:
    print('PAYROLL_TEST is not True')
try:
    HRMS_DO_S3BUCKET = env.str('HRMS_S3_BUCKET')
except:
    print('hrms_s3_bucket_name_gone_wrong')

try:
    S3_SUB_PATH = env.str('S3_SUB_PATH')
except:
    print('hrms_sub_path_gone_wrong')







REST_KNOX = {
  'SECURE_HASH_ALGORITHM': 'cryptography.hazmat.primitives.hashes.SHA512',
  'AUTH_TOKEN_CHARACTER_LENGTH': 64,
  'TOKEN_TTL':timedelta(minutes=10),
  'USER_SERIALIZER': 'knox.serializers.UserSerializer',
  'TOKEN_LIMIT_PER_USER': 1,
  'AUTO_REFRESH': False
}

# login environment
ADFS_LOGIN = distutils.util.strtobool(env('ADFS_LOGIN_ENABLE'))
TOKEN_URL = env('TOKEN_URL')
CLIENT_ID = env('CLIENT_ID')
REDIRECT_URI = env('APP_URL')

# from userservice.controller import apschedulercontroller
# apschedulercontroller.scheduler_trigger_Trailbalance_Report()

# from attendanceservice.service import attendacescheduler
# attendacescheduler.data_migration()
# attendacescheduler.push_notification_trigger()

FA_APPLICATION_BE_URL=env.str('FA_APPLICATION_BE_URL')
MASTER_BE_URL= env.str('MASTER_BE_URL')
MASTER_SERVER_IP=MASTER_BE_URL
