from gajim.common.i18n import _

class _DEFAULT:
    pass

class _ACCOUNT_DEFAULT:
    pass

HAS_APP_DEFAULT = _DEFAULT()
HAS_ACCOUNT_DEFAULT = _ACCOUNT_DEFAULT()

# pylint: disable=line-too-long

APP_SETTINGS = {
    'autopopup': False,
    'show_notifications': True,
    'autopopupaway': False,
    'sounddnd': False,
    'showoffline': True,
    'show_only_chat_and_online': False,
    'show_transports_group': True,
    'autoaway': True,
    'autoawaytime': 5,
    'autoaway_message': '',
    'autoxa': True,
    'autoxatime': 15,
    'autoxa_message': '',
    'ask_online_status': False,
    'ask_offline_status': False,
    'trayicon': 'always',
    'allow_hide_roster': False,
    'iconset': 'dcraven',
    'use_transports_iconsets': True,
    'collapsed_rows': '',
    'roster_theme': 'default',
    'mergeaccounts': False,
    'sort_by_show_in_roster': True,
    'sort_by_show_in_muc': False,
    'use_speller': False,
    'show_xhtml': True,
    'speller_language': '',
    'print_time': 'always',
    'emoticons_theme': 'noto-emoticons',
    'ascii_formatting': True,
    'show_ascii_formatting_chars': True,
    'sounds_on': True,
    'gc_refer_to_nick_char': ',',
    'msgwin-max-state': False,
    'msgwin-x-position': -1,
    'msgwin-y-position': -1,
    'msgwin-width': 500,
    'msgwin-height': 440,
    'chat-msgwin-x-position': -1,
    'chat-msgwin-y-position': -1,
    'chat-msgwin-width': 480,
    'chat-msgwin-height': 440,
    'gc-msgwin-x-position': -1,
    'gc-msgwin-y-position': -1,
    'gc-msgwin-width': 600,
    'gc-msgwin-height': 440,
    'pm-msgwin-x-position': -1,
    'pm-msgwin-y-position': -1,
    'pm-msgwin-width': 480,
    'pm-msgwin-height': 440,
    'single-msg-x-position': 0,
    'single-msg-y-position': 0,
    'single-msg-width': 400,
    'single-msg-height': 280,
    'save-roster-position': True,
    'roster_x-position': 0,
    'roster_y-position': 0,
    'roster_width': 200,
    'roster_height': 400,
    'roster_hpaned_position': 200,
    'roster_on_the_right': False,
    'history_window_width': -1,
    'history_window_height': 450,
    'history_window_x-position': 0,
    'history_window_y-position': 0,
    'latest_disco_addresses': '',
    'time_stamp': '%x | %X  ',
    'before_nickname': '',
    'after_nickname': ':',
    'change_roster_title': True,
    'restore_lines': 10,
    'restore_timeout': -1,
    'send_on_ctrl_enter': False,
    'last_roster_visible': True,
    'key_up_lines': 25,
    'search_engine': 'https://duckduckgo.com/?q=%s',
    'dictionary_url': 'WIKTIONARY',
    'always_english_wikipedia': False,
    'always_english_wiktionary': True,
    'remote_control': False,
    'print_ichat_every_foo_minutes': 5,
    'confirm_paste_image': True,
    'confirm_close_muc': True,
    'confirm_close_multiple_tabs': True,
    'notify_on_file_complete': True,
    'file_transfers_port': 28011,
    'ft_add_hosts_to_send': '',
    'use_kib_mib': False,
    'notify_on_all_muc_messages': False,
    'trayicon_notification_on_events': True,
    'last_save_dir': '',
    'last_send_dir': '',
    'last_sounds_dir': '',
    'tabs_position': 'left',
    'tabs_always_visible': False,
    'tabs_border': False,
    'tabs_close_button': True,
    'notification_preview_message': True,
    'notification_position_x': -1,
    'notification_position_y': -1,
    'muc_highlight_words': '',
    'muc_prefer_direct_msg': True,
    'quit_on_roster_x_button': False,
    'hide_on_roster_x_button': False,
    'show_status_msgs_in_roster': True,
    'show_avatars_in_roster': True,
    'show_mood_in_roster': True,
    'show_activity_in_roster': True,
    'show_tunes_in_roster': True,
    'show_location_in_roster': True,
    'avatar_position_in_roster': 'right',
    'print_status_in_chats': False,
    'log_contact_status_changes': False,
    'roster_window_skip_taskbar': False,
    'use_urgency_hint': True,
    'notification_timeout': 5,
    'one_message_window': 'always',
    'show_roster_on_startup': 'always',
    'escape_key_closes': False,
    'hide_groupchat_banner': False,
    'hide_chat_banner': False,
    'hide_groupchat_occupants_list': False,
    'chat_merge_consecutive_nickname': False,
    'chat_merge_consecutive_nickname_indent': '  ',
    'ctrl_tab_go_to_next_composing': True,
    'metacontacts_enabled': True,
    'confirm_metacontacts': '',
    'confirm_block': '',
    'enable_negative_priority': False,
    'show_contacts_number': True,
    'scroll_roster_to_last_message': True,
    'change_status_window_timeout': 15,
    'max_conversation_lines': 500,
    'shell_like_completion': False,
    'audio_input_device': 'autoaudiosrc ! volume name=gajim_vol',
    'audio_output_device': 'autoaudiosink',
    'video_input_device': 'autovideosrc',
    'video_framerate': '',
    'video_size': '',
    'video_see_self': True,
    'audio_input_volume': 50,
    'audio_output_volume': 50,
    'use_stun_server': False,
    'stun_server': '',
    'global_proxy': '',
    'ignore_incoming_attention': False,
    'remember_opened_chat_controls': True,
    'positive_184_ack': False,
    'use_keyring': True,
    'remote_commands': False,
    'dark_theme': 2,
    'gc_sync_threshold_public_default': 1,
    'gc_sync_threshold_private_default': 0,
    'show_subject_on_join': True,
    'show_chatstate_in_roster': True,
    'show_chatstate_in_tabs': True,
    'show_chatstate_in_banner': True,
    'muclumbus_api_jid': 'api@search.jabber.network',
    'muclumbus_api_http_uri': 'https://search.jabber.network/api/1.0/search',
    'muclumbus_api_pref': 'http',
    'command_system_execute': False,
    'groupchat_roster_width': 210,
    'dev_force_bookmark_2': False,
    'show_help_start_chat': True,
    'gc_notify_on_all_messages_private_default': True,
    'gc_notify_on_all_messages_public_default': False,
    'gc_print_status_default': False,
    'gc_print_join_left_default': False,
    'check_for_update': True,
    'last_update_check': '',
    'always_ask_for_status_message': False,
    'show_send_message_button': False,
}

ACCOUNT_SETTINGS = {
    'account': {
        'name': '',
        'account_label': '',
        'account_color': 'rgb(85, 85, 85)',
        'hostname': '',
        'anonymous_auth': False,
        'avatar_sha': '',
        'client_cert': '',
        'client_cert_encrypted': False,
        'savepass': False,
        'password': '',
        'resource': 'gajim.$rand',
        'priority': 0,
        'adjust_priority_with_status': False,
        'autopriority_online': 50,
        'autopriority_chat': 50,
        'autopriority_away': 40,
        'autopriority_xa': 30,
        'autopriority_dnd': 20,
        'autoconnect': False,
        'restore_last_status': False,
        'autoauth': False,
        'active': True,
        'proxy': '',
        'keyid': '',
        'keyname': '',
        'use_plain_connection': False,
        'confirm_unencrypted_connection': True,
        'use_custom_host': False,
        'custom_port': 5222,
        'custom_host': '',
        'custom_type': 'START TLS',
        'sync_with_global_status': False,
        'no_log_for': '',
        'attached_gpg_keys': '',
        'http_auth': 'ask',
        'file_transfer_proxies': '',
        'use_ft_proxies': False,
        'test_ft_proxies_on_startup': False,
        'msgwin-x-position': -1,
        'msgwin-y-position': -1,
        'msgwin-width': 480,
        'msgwin-height': 440,
        'is_zeroconf': False,
        'last_status': 'online',
        'last_status_msg': '',
        'zeroconf_first_name': '',
        'zeroconf_last_name': '',
        'zeroconf_jabber_id': '',
        'zeroconf_email': '',
        'answer_receipts': True,
        'publish_tune': False,
        'publish_location': False,
        'request_user_data': True,
        'ignore_unknown_contacts': False,
        'send_os_info': True,
        'send_time_info': True,
        'send_idle_time': True,
        'roster_version': '',
        'subscription_request_msg': '',
        'ft_send_local_ips': True,
        'opened_chat_controls': '',
        'recent_groupchats': '',
        'filetransfer_preference': 'httpupload',
        'send_chatstate_default': 'composing_only',
        'gc_send_chatstate_default': 'composing_only',
        'send_marker_default': True,
        'gc_send_marker_private_default': True,
        'gc_send_marker_public_default': False,
        'chat_history_max_age': -1,
        'enable_gssapi': False,
    },

    'contact': {
        'speller_language': '',
        'send_chatstate': HAS_ACCOUNT_DEFAULT,
        'send_marker': HAS_ACCOUNT_DEFAULT,
        'encryption': '',
    },

    'group_chat': {
        'speller_language': '',
        'notify_on_all_messages': HAS_APP_DEFAULT,
        'print_status': HAS_APP_DEFAULT,
        'print_join_left': HAS_APP_DEFAULT,
        'minimize_on_autojoin': True,
        'minimize_on_close': True,
        'send_chatstate': HAS_ACCOUNT_DEFAULT,
        'send_marker': HAS_ACCOUNT_DEFAULT,
        'encryption': '',
        'sync_threshold': HAS_APP_DEFAULT,
    },
}


PLUGIN_SETTINGS = {
    'active': False
}


STATUS_PRESET_SETTINGS = {
    'message': '',
    'activity': '',
    'subactivity': '',
    'mood': '',
}


STATUS_PRESET_EXAMPLES = {
    _('Sleeping'): {
        'message': _('ZZZZzzzzzZZZZZ'),
        'activity': 'inactive',
        'subactivity': 'sleeping',
        'mood': 'sleepy'
    },
    _('Back soon'): {
        'message': _('Back in some minutes.')
    },
    _('Eating'): {
        'message': _('I’m eating.'),
        'activity': 'eating',
        'subactivity': 'other'
    },
    _('Movie'): {
        'message': _('I’m watching a movie.'),
        'activity': 'relaxing',
        'subactivity': 'watching_a_movie'
    },
    _('Working'): {
        'message': _('I’m working.'),
        'activity': 'working',
        'subactivity': 'other'
    },
    _('Out'): {
        'message': _('I’m out enjoying life.'),
        'activity': 'relaxing',
        'subactivity': 'going_out'
    }
}


PROXY_SETTINGS = {
    'type': 'socks5',
    'host': '',
    'port': 0,
    'useauth': False,
    'user': '',
    'pass': '',
}


PROXY_EXAMPLES = {
    'Tor': {
        'type': 'socks5',
        'host': 'localhost',
        'port': 9050
    },
}


DEFAULT_SOUNDEVENT_SETTINGS = {
    'attention_received': {
        'enabled': True,
        'path': 'attention.wav'
    },
    'first_message_received': {
        'enabled': True,
        'path': 'message1.wav'
    },
    'next_message_received_focused': {
        'enabled': True,
        'path': 'message2.wav'
    },
    'next_message_received_unfocused': {
        'enabled': True,
        'path': 'message2.wav'
    },
    'contact_connected': {
        'enabled': False,
        'path': 'connected.wav'
    },
    'contact_disconnected': {
        'enabled': False,
        'path': 'disconnected.wav'
    },
    'message_sent': {
        'enabled': False,
        'path': 'sent.wav'
    },
    'muc_message_highlight': {
        'enabled': True,
        'path': 'gc_message1.wav'
    },
    'muc_message_received': {
        'enabled': True,
        'path': 'message2.wav'
    }
}


ADVANCED_SETTINGS = {
    'app': {
        'allow_hide_roster': _('Allow to hide the contact list window even if the notification area icon is not shown.'),
        'print_time': _('\'always\' - print time for every message.\n\'sometimes\' - print time every print_ichat_every_foo_minutes minute.\n\'never\' - never print time.'),
        'ascii_formatting': _('Treat * / _ pairs as possible formatting characters.'),
        'show_ascii_formatting_chars': _('If enabled, do not remove */_ . So *abc* will be bold but with * * not removed.'),
        'gc_refer_to_nick_char': _('Character to add after nickname when using nickname completion (tab) in group chat.'),
        'save-roster-position': _('If enabled, Gajim will save the contact list window position when hiding it, and restore it when showing the contact list window again.'),
        'roster_on_the_right': _('Place the contact list on the right in single window mode'),
        'time_stamp': _('This option lets you customize the timestamp that is printed in conversation. For example \'[%H:%M] \' will show \'[hour:minute] \'. See python doc on strftime for full documentation (https://docs.python.org/3/library/time.html#time.strftime).'),
        'before_nickname': _('Characters that are printed before the nickname in conversations.'),
        'after_nickname': _('Characters that are printed after the nickname in conversations.'),
        'change_roster_title': _('If enabled, Gajim will add * and [n] in contact list window title.'),
        'restore_lines': _('Number of messages from chat history to be restored when a chat tab/window is reopened.'),
        'restore_timeout': _('How far back in time (minutes) chat history is restored. -1 means no limit.'),
        'send_on_ctrl_enter': _('Send message on Ctrl+Enter and make a new line with Enter.'),
        'key_up_lines': _('How many lines to store for Ctrl+KeyUP (previously sent messages).'),
        'search_engine': '',
        'dictionary_url': _('Either a custom URL with %%s in it (where %%s is the word/phrase) or \'WIKTIONARY\' (which means use Wikitionary).'),
        'always_english_wikipedia': '',
        'always_english_wiktionary': '',
        'remote_control': _('If checked, Gajim can be controlled remotely using gajim-remote.'),
        'print_ichat_every_foo_minutes': _('When not printing time for every message (\'print_time\'==sometimes, print it every x minutes.'),
        'confirm_paste_image': _('Ask before pasting an image.'),
        'confirm_close_muc': _('Ask before closing a group chat tab/window.'),
        'confirm_close_multiple_tabs': _('Ask before closing tabbed chat window if there are chats that can lose data (chat, private chat, group chat that will not be minimized).'),
        'file_transfers_port': '',
        'ft_add_hosts_to_send': _('List of send hosts (comma separated) in addition to local interfaces for file transfers (in case of address translation/port forwarding).'),
        'use_kib_mib': _('IEC standard says KiB = 1024 bytes, KB = 1000 bytes.'),
        'notify_on_all_muc_messages': '',
        'trayicon_notification_on_events': _('Notify of events in the notification area.'),
        'tabs_always_visible': _('Show tab when only one conversation?'),
        'tabs_border': _('Show tabbed notebook border in chat windows?'),
        'tabs_close_button': _('Show close button in tab?'),
        'notification_preview_message': _('Preview new messages in notification popup?'),
        'muc_highlight_words': _('A list of words (semicolon separated) that will be highlighted in group chats.'),
        'hide_on_roster_x_button': _('If enabled, Gajim hides the contact list window when pressing the X button instead of minimizing into the notification area.'),
        'show_mood_in_roster': '',
        'show_activity_in_roster': '',
        'show_tunes_in_roster': '',
        'show_location_in_roster': '',
        'avatar_position_in_roster': _('Define the position of avatars in the contact list. Can be \'left\' or \'right\'.'),
        'roster_window_skip_taskbar': _('Don\'t show contact list window in the system taskbar.'),
        'use_urgency_hint': _('If enabled, Gajim makes the window flash (the default behaviour in most Window Managers) when holding pending events.'),
        'notification_timeout': '',
        'escape_key_closes': _('If enabled, pressing Esc closes a tab/window.'),
        'hide_groupchat_banner': _('Hides the banner in a group chat window.'),
        'hide_chat_banner': _('Hides the banner in a 1:1 chat window.'),
        'hide_groupchat_occupants_list': _('Hides the group chat participants list in a group chat window.'),
        'chat_merge_consecutive_nickname': _('In a chat, show the nickname at the beginning of a line only when it\'s not the same person talking as in the previous message.'),
        'chat_merge_consecutive_nickname_indent': _('Indentation when using merge consecutive nickname.'),
        'ctrl_tab_go_to_next_composing': _('Ctrl+Tab switches to the next composing tab when there are no tabs with messages pending.'),
        'confirm_metacontacts': _('Show a confirmation dialog to create metacontacts? Empty string means never show the dialog.'),
        'confirm_block': _('Show a confirmation dialog to block a contact? Empty string means never show the dialog.'),
        'enable_negative_priority': _('If enabled, you will be able to set a negative priority to your account in the Accounts window. BE CAREFUL, when you are logged in with a negative priority, you will NOT receive any message from your server.'),
        'show_contacts_number': _('If enabled, Gajim will show both the number of online and total contacts in account rows as well as in group rows.'),
        'scroll_roster_to_last_message': _('If enabled, Gajim will scroll and select the contact who sent you the last message, if the chat window is not already opened.'),
        'change_status_window_timeout': _('Time of inactivity needed before the change status window closes down.'),
        'max_conversation_lines': _('Maximum number of lines that are printed in conversations. Oldest lines are cleared.'),
        'shell_like_completion': _('If enabled, completion in group chats will be like a shell auto-completion.'),
        'use_stun_server': _('If enabled, Gajim will try to use a STUN server when using Jingle. The one in \'stun_server\' option, or the one given by the XMPP server.'),
        'stun_server': _('STUN server to use when using Jingle'),
        'ignore_incoming_attention': _('If enabled, Gajim will ignore incoming attention requests (\'wizz\').'),
        'remember_opened_chat_controls': _('If enabled, Gajim will reopen chat windows that were opened last time Gajim was closed.'),
        'remote_commands': _('If enabled, Gajim will execute XEP-0146 Commands.'),
        'muclumbus_api_jid': '',
        'muclumbus_api_http_uri': '',
        'muclumbus_api_pref': _('API Preferences. Possible values: \'http\', \'iq\''),
        'command_system_execute': _('If enabled, Gajim will execute commands (/show, /sh, /execute, /exec).'),
        'groupchat_roster_width': _('Width of group chat roster in pixel'),
        'dev_force_bookmark_2': _('Force Bookmark 2 usage'),
        'gc_notify_on_all_messages_private_default': '',
        'gc_notify_on_all_messages_public_default': '',
        'metacontacts_enabled': '',
    },
}

# pylint: enable=line-too-long
