# By: Riasat Ullah
# This file contains functions that will generate the context of info pages like registration, login, etc.

from constants import label_names as lbl, var_names
from context_manager import components_context
from taskcallweb import settings
from translators import label_translator as lt


def get_register_initiate_context(lang):
    '''
    Context for the page where the registration process is initiated from. The step where the owner provides his email.
    '''
    sector_context = components_context.get_sectors_context(lang)

    page_labels = [lbl.err_invalid_email, lbl.err_invalid_request, lbl.ttl_register]
    page_labels += list(components_context.language_maps.values())

    final_context = {**sector_context, **lt.get_context(page_labels, lang),
                     var_names.host_region: settings.REGION}
    return final_context


def get_register_step_one_subdomain_region_context(lang):
    '''
    Context for the first step of the organization registration page
    where the account subdomain and data center region is chosen.
    '''
    sector_context = components_context.get_sectors_context(lang)

    page_labels = [lbl.det_language, lbl.det_privacy_policy, lbl.err_invalid_email, lbl.err_invalid_request,
                   lbl.err_subdomain_invalid, lbl.err_subdomain_unavailable, lbl.ins_next, lbl.opt_english, lbl.opt_eu,
                   lbl.opt_spanish, lbl.opt_us, lbl.qqs_why_need_subdomain, lbl.ttl_data_center_region,
                   lbl.ttl_register, lbl.ttl_subdomain]

    page_labels += list(components_context.language_maps.values())

    page_descriptions = [lbl.desc_data_center_region, lbl.desc_reg_choose_subdomain_and_region, lbl.desc_subdomain]

    final_context = {**sector_context, **lt.get_context(page_labels + page_descriptions, lang),
                     var_names.host_region: settings.REGION}
    return final_context


def get_register_step_two_owner_info_context(lang):
    '''
    Context for the second step of the organization registration page where the owner provides his personal details.
    '''
    sector_context = components_context.get_sectors_context(lang)

    page_labels = [lbl.det_language, lbl.det_phone, lbl.det_password, lbl.det_privacy_policy, lbl.det_re_type_password,
                   lbl.err_invalid_request, lbl.err_password_invalid, lbl.err_password_mismatch,
                   lbl.err_phone_number_invalid, lbl.err_preferred_username_invalid, lbl.ins_next, lbl.ttl_first_name,
                   lbl.ttl_job_title, lbl.ttl_last_name, lbl.ttl_preferred_username, lbl.ttl_register]

    page_labels += list(components_context.language_maps.values())

    page_descriptions = [lbl.desc_reg_owner_personal_info]

    final_context = {**sector_context, **lt.get_context(page_labels + page_descriptions, lang),
                     var_names.host_region: settings.REGION}
    return final_context


def get_register_step_three_owner_verification_context(lang):
    '''
    Context for the third step of the organization registration page where the owner verifies himself.
    '''
    sector_context = components_context.get_sectors_context(lang)

    page_labels = [lbl.det_privacy_policy, lbl.dsm_verification_code, lbl.err_invalid_request, lbl.ins_verify,
                   lbl.ttl_register]

    page_labels += list(components_context.language_maps.values())

    page_descriptions = [lbl.desc_verification_code_enter, lbl.desc_verification_code_sent]

    final_context = {**sector_context, **lt.get_context(page_labels + page_descriptions, lang),
                     var_names.host_region: settings.REGION}
    return final_context


def get_register_step_four_organization_info_context(lang):
    '''
    Context for the last step of the organization registration page where the organization's details are collected.
    '''
    sector_context = components_context.get_sectors_context(lang)

    page_labels = [lbl.det_privacy_policy, lbl.err_invalid_request, lbl.err_org_address_incomplete,
                   lbl.err_org_name_invalid, lbl.ttl_address, lbl.ttl_city, lbl.ttl_country, lbl.ttl_organization_name,
                   lbl.ttl_register, lbl.ttl_sector, lbl.ttl_state, lbl.ttl_zip_code]

    page_labels += list(components_context.language_maps.values())

    page_descriptions = [lbl.desc_reg_organization_info]

    final_context = {**sector_context, **lt.get_context(page_labels + page_descriptions, lang),
                     var_names.host_region: settings.REGION}
    return final_context


def get_register_member_initiate_context(lang):
    '''
    Context for the member registration page.
    '''
    sector_context = components_context.get_sectors_context(lang)

    page_labels = [lbl.det_privacy_policy, lbl.dsm_verification_code, lbl.err_invalid_email, lbl.err_invalid_request,
                   lbl.ins_next, lbl.opt_english, lbl.opt_eu, lbl.opt_spanish, lbl.opt_us, lbl.ttl_data_center_region,
                   lbl.ttl_email, lbl.ttl_member_registration, lbl.ttl_register_member]

    page_labels += list(components_context.language_maps.values())

    page_descriptions = [lbl.desc_reg_member_info]

    final_context = {**sector_context, **lt.get_context(page_labels + page_descriptions, lang),
                     var_names.host_region: settings.REGION}
    return final_context


def get_register_member_personal_info_context(lang):
    '''
    Context for register member process where the member is required to provide his personal information.
    '''
    sector_context = components_context.get_sectors_context(lang)

    page_labels = [lbl.det_language, lbl.det_phone, lbl.det_password, lbl.det_privacy_policy, lbl.det_re_type_password,
                   lbl.err_invalid_email, lbl.err_invalid_request, lbl.err_password_invalid, lbl.err_password_mismatch,
                   lbl.err_phone_number_invalid, lbl.err_preferred_username_invalid, lbl.ttl_first_name,
                   lbl.ttl_last_name, lbl.ttl_member_registration, lbl.ttl_preferred_username, lbl.ttl_register,
                   lbl.ttl_register_member]

    page_labels += list(components_context.language_maps.values())

    page_descriptions = [lbl.desc_reg_member_personal_info]

    final_context = {**sector_context, **lt.get_context(page_labels + page_descriptions, lang)}
    return final_context


def get_member_auto_provision_context(lang):
    '''
    Context for the auto provision member page.
    '''
    sector_context = components_context.get_sectors_context(lang)

    page_labels = [lbl.det_language, lbl.det_phone, lbl.det_privacy_policy, lbl.err_invalid_request,
                   lbl.err_phone_number_invalid, lbl.err_preferred_username_invalid, lbl.opt_english, lbl.opt_spanish,
                   lbl.ttl_first_name, lbl.ttl_last_name, lbl.ttl_member_registration, lbl.ttl_preferred_username,
                   lbl.ttl_register_and_launch, lbl.ttl_register_member]

    page_labels += list(components_context.language_maps.values())
    page_descriptions = [lbl.desc_auto_provision_user_welcome_note]

    final_context = {**sector_context, **lt.get_context(page_labels + page_descriptions, lang)}
    return final_context


def get_login_context(lang):
    '''
    Context for the log in page.
    '''
    page_labels = [lbl.det_contact_us, lbl.det_enter_your_account_subdomain, lbl.det_log_into_your_account,
                   lbl.det_log_in_with_your_identity_provider, lbl.det_log_in_with_your_taskcall_credentials,
                   lbl.det_password, lbl.det_privacy_policy, lbl.opt_english, lbl.opt_eu, lbl.opt_spanish, lbl.opt_us,
                   lbl.qqs_forgot_password, lbl.qqs_forgot_subdomain, lbl.qqs_log_in_with_google_and_more,
                   lbl.ttl_data_center_region, lbl.ttl_email, lbl.ttl_log_in, lbl.ttl_subdomain]

    final_context = lt.get_context(page_labels, lang)
    final_context[var_names.host_region] = settings.REGION
    return final_context


def get_forgot_password_context(lang):
    '''
    Context for the forgot password page.
    '''
    page_labels = [lbl.det_confirm, lbl.det_confirm_email, lbl.det_password, lbl.det_re_type_password,
                   lbl.dsm_verification_code, lbl.dsm_with_your_new_password, lbl.ins_verify, lbl.err_invalid_email,
                   lbl.err_password_invalid, lbl.err_password_mismatch, lbl.ins_reset, lbl.opt_english, lbl.opt_spanish,
                   lbl.qqs_forgot_password, lbl.ttl_email, lbl.ttl_log_in, lbl.ttl_reset_password]

    page_descriptions = [lbl.desc_password_reset, lbl.desc_verification_code_enter, lbl.desc_verification_code_sent]

    final_context = {**lt.get_context(page_labels + page_descriptions, lang)}
    return final_context


def get_forgot_subdomain_context(lang):
    '''
    Context for the forgot subdomain page.
    '''
    page_labels = [lbl.det_confirm_email, lbl.err_invalid_email, lbl.ins_send_subdomain, lbl.msg_subdomain_emailed,
                   lbl.opt_english, lbl.opt_spanish, lbl.qqs_forgot_subdomain, lbl.ttl_email, lbl.ttl_log_in]

    page_descriptions = [lbl.desc_subdomain_forgot_confirm_email]

    final_context = {**lt.get_context(page_labels + page_descriptions, lang)}
    return final_context


def get_email_subscription_cancel_context(lang):
    '''
    Context for the email subscription cancellation page.
    '''
    page_labels = [lbl.msg_email_unsubscribed, lbl.msg_email_unsubscribe_confirmation,
                   lbl.msg_email_unsubscribe_onboarding]
    final_context = {**lt.get_context(page_labels, lang)}
    return final_context
