__filename__ = "webapp_headerbuttons.py"
__author__ = "Bob Mottram"
__license__ = "AGPL3+"
__version__ = "1.5.0"
__maintainer__ = "Bob Mottram"
__email__ = "bob@libreserver.org"
__status__ = "Production"
__module_group__ = "Timeline"


import os
import time
from utils import acct_dir
from datetime import datetime
from datetime import timedelta
from happening import day_events_check
from webapp_utils import html_highlight_label


def header_buttons_timeline(default_timeline: str,
                            box_name: str,
                            page_number: int,
                            translate: {},
                            users_path: str,
                            media_button: str,
                            blogs_button: str,
                            features_button: str,
                            inbox_button: str,
                            dm_button: str,
                            new_dm: str,
                            replies_button: str,
                            new_reply: str,
                            minimal: bool,
                            sent_button: str,
                            shares_button_str: str,
                            wanted_button_str: str,
                            bookmarks_button_str: str,
                            events_button_str: str,
                            moderation_button_str: str,
                            new_post_button_str: str,
                            base_dir: str,
                            nickname: str, domain: str,
                            timeline_start_time,
                            new_calendar_event: bool,
                            calendar_path: str,
                            calendar_image: str,
                            follow_approvals: str,
                            icons_as_buttons: bool,
                            access_keys: {},
                            is_text_browser: str) -> str:
    """Returns the header at the top of the timeline, containing
    buttons for inbox, outbox, search, calendar, etc
    """
    # start of the button header with inbox, outbox, etc
    tl_str = '<div id="containerHeader" class="containerHeader"><nav>\n'

    # if this is a news instance and we are viewing the news timeline
    features_header = False
    if default_timeline == 'tlfeatures' and box_name == 'tlfeatures':
        features_header = True

    if not is_text_browser:

        # first button
        if default_timeline == 'tlmedia':
            tl_str += \
                '<a href="' + users_path + '/tlmedia" tabindex="2" ' + \
                'accesskey="' + access_keys['menuMedia'] + '"'
            if box_name == 'tlmedia':
                tl_str += ' aria-current="location"'
            tl_str += \
                '><button class="' + \
                media_button + '"><span>' + translate['Media'] + \
                '</span></button></a>'
        elif default_timeline == 'tlblogs':
            tl_str += \
                '<a href="' + users_path + \
                '/tlblogs" tabindex="2"'
            if box_name == 'tlblogs':
                tl_str += ' aria-current="location"'
            tl_str += \
                '><button class="' + \
                blogs_button + '" accesskey="' + access_keys['menuBlogs'] + \
                '"><span>' + translate['Blogs'] + '</span></button></a>'
        elif default_timeline == 'tlfeatures':
            tl_str += \
                '<a href="' + users_path + \
                '/tlfeatures" tabindex="2"'
            if box_name == 'tlfeatures':
                tl_str += ' aria-current="location"'
            tl_str += \
                '><button class="' + \
                features_button + '"><span>' + translate['Features'] + \
                '</span></button></a>'
        else:
            tl_str += \
                '<a href="' + users_path + \
                '/inbox" tabindex="2"><button class="' + \
                inbox_button + '"'
            if box_name == 'inbox':
                tl_str += ' aria-current="location"'
            tl_str += \
                ' accesskey="' + access_keys['menuInbox'] + '">' + \
                '<span>' + translate['Inbox'] + '</span></button></a>'

        if not features_header:
            tl_str += \
                '<a href="' + users_path + '/dm" tabindex="2"'
            if box_name == 'dm':
                tl_str += ' aria-current="location"'
            tl_str += \
                '><button class="' + dm_button + \
                '" accesskey="' + access_keys['menuDM'] + '">' + \
                '<span>' + html_highlight_label(translate['DM'], new_dm) + \
                '</span></button></a>'

            replies_index_filename = \
                acct_dir(base_dir, nickname, domain) + '/tlreplies.index'
            if os.path.isfile(replies_index_filename):
                tl_str += \
                    '<a href="' + users_path + '/tlreplies" tabindex="2"'
                if box_name == 'tlreplies':
                    tl_str += ' aria-current="location"'
                tl_str += \
                    '><button class="' + replies_button + '" ' + \
                    'accesskey="' + access_keys['menuReplies'] + '"><span>' + \
                    html_highlight_label(translate['Replies'], new_reply) + \
                    '</span></button></a>'

        # typically the media button
        if default_timeline != 'tlmedia':
            if not minimal and not features_header:
                tl_str += \
                    '<a href="' + users_path + '/tlmedia" tabindex="2" ' + \
                    'accesskey="' + access_keys['menuMedia'] + '"'
                if box_name == 'tlmedia':
                    tl_str += ' aria-current="location"'
                tl_str += \
                    '><button class="' + \
                    media_button + '"><span>' + translate['Media'] + \
                    '</span></button></a>'
        else:
            if not minimal:
                tl_str += \
                    '<a href="' + users_path + \
                    '/inbox" tabindex="2"'
                if box_name == 'inbox':
                    tl_str += ' aria-current="location"'
                tl_str += \
                    '><button class="' + \
                    inbox_button + '"><span>' + translate['Inbox'] + \
                    '</span></button></a>'

        if not features_header:
            # typically the blogs button
            # but may change if this is a blogging oriented instance
            if default_timeline != 'tlblogs':
                if not minimal:
                    title_str = translate['Blogs']
                    if default_timeline == 'tlfeatures':
                        title_str = translate['Article']
                    tl_str += \
                        '<a href="' + users_path + \
                        '/tlblogs" tabindex="2"'
                    if box_name == 'tlblogs':
                        tl_str += ' aria-current="location"'
                    tl_str += \
                        '><button class="' + blogs_button + '" accesskey="' + \
                        access_keys['menuBlogs'] + '"><span>' + title_str + \
                        '</span></button></a>'
            else:
                if not minimal:
                    tl_str += \
                        '<a href="' + users_path + \
                        '/inbox" tabindex="2"'
                    if box_name == 'inbox':
                        tl_str += ' aria-current="location"'
                    tl_str += \
                        '><button class="' + \
                        inbox_button + '"><span>' + translate['Inbox'] + \
                        '</span></button></a>'

        # typically the news button
        # but may change if this is a news oriented instance
        if default_timeline == 'tlfeatures':
            if not features_header:
                tl_str += \
                    '<a href="' + users_path + \
                    '/inbox" tabindex="2"'
                if box_name == 'inbox':
                    tl_str += ' aria-current="location"'
                tl_str += \
                    '><button class="' + \
                    inbox_button + '" accesskey="' + \
                    access_keys['menuInbox'] + '"><span>' + \
                    translate['Inbox'] + '</span></button></a>'

    # show todays events buttons on the first inbox page
    happening_str = ''
    if box_name == 'inbox' and page_number == 1:
        now = datetime.now()
        tomorrow = datetime.now() + timedelta(1)
        twodays = datetime.now() + timedelta(2)
        if day_events_check(base_dir, nickname, domain, now):
            # happening today button
            if not icons_as_buttons:
                happening_str += \
                    '<a href="' + users_path + '/calendar?year=' + \
                    str(now.year) + '?month=' + str(now.month) + \
                    '?day=' + str(now.day) + '" tabindex="2">' + \
                    '<button class="buttonevent">' + \
                    translate['Happening Today'] + '</button></a>'
            else:
                happening_str += \
                    '<a href="' + users_path + '/calendar?year=' + \
                    str(now.year) + '?month=' + str(now.month) + \
                    '?day=' + str(now.day) + '" tabindex="2">' + \
                    '<button class="button">' + \
                    translate['Happening Today'] + '</button></a>'

        elif day_events_check(base_dir, nickname, domain, tomorrow):
            # happening tomorrow button
            if not icons_as_buttons:
                happening_str += \
                    '<a href="' + users_path + '/calendar?year=' + \
                    str(tomorrow.year) + '?month=' + str(tomorrow.month) + \
                    '?day=' + str(tomorrow.day) + '" tabindex="2">' + \
                    '<button class="buttonevent">' + \
                    translate['Happening Tomorrow'] + '</button></a>'
            else:
                happening_str += \
                    '<a href="' + users_path + '/calendar?year=' + \
                    str(tomorrow.year) + '?month=' + str(tomorrow.month) + \
                    '?day=' + str(tomorrow.day) + '" tabindex="2">' + \
                    '<button class="button">' + \
                    translate['Happening Tomorrow'] + '</button></a>'
        elif day_events_check(base_dir, nickname, domain, twodays):
            if not icons_as_buttons:
                happening_str += \
                    '<a href="' + users_path + \
                    '/calendar" tabindex="2">' + \
                    '<button class="buttonevent">' + \
                    translate['Happening This Week'] + '</button></a>'
            else:
                happening_str += \
                    '<a href="' + users_path + \
                    '/calendar" tabindex="2">' + \
                    '<button class="button">' + \
                    translate['Happening This Week'] + '</button></a>'

    if not is_text_browser:
        if not features_header:
            # button for the outbox
            tl_str += \
                '<a href="' + users_path + '/outbox"'
            if box_name == 'outbox':
                tl_str += ' aria-current="location"'
            tl_str += \
                '><button class="' + \
                sent_button + '" tabindex="2" accesskey="' + \
                access_keys['menuOutbox'] + '">' + \
                '<span>' + translate['Sent'] + '</span></button></a>'

            # add other buttons
            tl_str += \
                shares_button_str + wanted_button_str + \
                bookmarks_button_str + events_button_str + \
                moderation_button_str + happening_str + new_post_button_str
    else:
        tl_str += happening_str

    if not is_text_browser:
        if not features_header:
            if not icons_as_buttons:
                # the search icon
                tl_str += \
                    '<a class="imageAnchor" href="' + users_path + \
                    '/search" accesskey="' + access_keys['menuSearch'] + \
                    '" tabindex="3">' + \
                    '<img loading="lazy" decoding="async" src="/' + \
                    'icons/search.png" title="' + \
                    translate['Search and follow'] + '" alt="| ' + \
                    translate['Search and follow'] + \
                    '" class="timelineicon"/></a>'
            else:
                # the search button
                tl_str += \
                    '<a href="' + users_path + \
                    '/search" tabindex="3">' + \
                    '<button class="button" ' + \
                    'accesskey="' + access_keys['menuSearch'] + '>' + \
                    '<span>' + translate['Search'] + \
                    '</span></button></a>'

    # benchmark 5
    time_diff = int((time.time() - timeline_start_time) * 1000)
    if time_diff > 100:
        print('TIMELINE TIMING ' + box_name + ' 5 = ' + str(time_diff))

    # the calendar button
    if not is_text_browser:
        if not features_header:
            calendar_alt_text = translate['Calendar']
            if new_calendar_event:
                # indicate that the calendar icon is highlighted
                calendar_alt_text = '*' + calendar_alt_text + '*'
            if not icons_as_buttons:
                tl_str += \
                    '      <a class="imageAnchor" href="' + \
                    users_path + calendar_path + \
                    '" accesskey="' + access_keys['menuCalendar'] + \
                    '" tabindex="3">' + \
                    '<img loading="lazy" decoding="async" src="/icons/' + \
                    calendar_image + '" title="' + translate['Calendar'] + \
                    '" alt="| ' + calendar_alt_text + \
                    '" class="timelineicon"/></a>\n'
            else:
                tl_str += \
                    '<a href="' + users_path + calendar_path + \
                    '" tabindex="3"><button class="button" accesskey="' + \
                    access_keys['menuCalendar'] + '">' + \
                    '<span>' + translate['Calendar'] + \
                    '</span></button></a>'

        if not features_header:
            # the show/hide button, for a simpler header appearance
            if not icons_as_buttons:
                tl_str += \
                    '      <a class="imageAnchor" href="' + \
                    users_path + '/minimal" tabindex="3">' + \
                    '<img loading="lazy" decoding="async" src="/icons' + \
                    '/showhide.png" title="' + \
                    translate['Show/Hide Buttons'] + \
                    '" alt="| ' + translate['Show/Hide Buttons'] + \
                    '" class="timelineicon"/></a>\n'
            else:
                tl_str += \
                    '<a href="' + users_path + '/minimal' + \
                    '" tabindex="3"><button class="button">' + \
                    '<span>' + translate['Show/Hide Buttons'] + \
                    '</span></button></a>'

    if features_header:
        tl_str += \
            '<a href="' + users_path + '/inbox" tabindex="2"'
        if box_name == 'inbox':
            tl_str += ' aria-current="location"'
        tl_str += \
            '><button class="button">' + \
            '<span>' + translate['User'] + '</span></button></a>'

    if not is_text_browser:
        # the newswire button to show right column links
        if not icons_as_buttons:
            tl_str += \
                '<a class="imageAnchorMobile" href="' + \
                users_path + '/newswiremobile">' + \
                '<img loading="lazy" decoding="async" src="/icons' + \
                '/newswire.png" title="' + translate['News'] + \
                '" alt="| ' + translate['News'] + \
                '" class="timelineicon"/></a>'
        else:
            # NOTE: deliberately no \n at end of line
            tl_str += \
                '<a href="' + \
                users_path + '/newswiremobile' + \
                '" tabindex="2"><button class="buttonMobile">' + \
                '<span>' + translate['Newswire'] + \
                '</span></button></a>'

        # the links button to show left column links
        if not icons_as_buttons:
            tl_str += \
                '<a class="imageAnchorMobile" href="' + \
                users_path + '/linksmobile">' + \
                '<img loading="lazy" decoding="async" src="/icons' + \
                '/links.png" title="' + translate['Edit Links'] + \
                '" alt="| ' + translate['Edit Links'] + \
                '" class="timelineicon"/></a>'
        else:
            # NOTE: deliberately no \n at end of line
            tl_str += \
                '<a href="' + \
                users_path + '/linksmobile' + \
                '" tabindex="2"><button class="buttonMobile">' + \
                '<span>' + translate['Links'] + \
                '</span></button></a>'

    if features_header:
        tl_str += \
            '<a href="' + users_path + '/editprofile" tabindex="2">' + \
            '<button class="buttonDesktop">' + \
            '<span>' + translate['Settings'] + '</span></button></a>'

    if not features_header:
        tl_str += follow_approvals

    if not icons_as_buttons:
        # end of headericons div
        tl_str += '</div>'

    # end of the button header with inbox, outbox, etc
    tl_str += '    </nav></div>\n'
    return tl_str