__filename__ = "webapp_headerbuttons.py"
__author__ = "Bob Mottram"
__license__ = "AGPL3+"
__version__ = "1.2.0"
__maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"


import os
import time
from datetime import datetime
from happening import todaysEventsCheck
from happening import thisWeeksEventsCheck
from webapp_utils import htmlHighlightLabel


def headerButtonsTimeline(defaultTimeline: str,
                          boxName: str,
                          pageNumber: int,
                          translate: {},
                          usersPath: str,
                          mediaButton: str,
                          blogsButton: str,
                          featuresButton: str,
                          newsButton: str,
                          inboxButton: str,
                          dmButton: str,
                          newDM: str,
                          repliesButton: str,
                          newReply: str,
                          minimal: bool,
                          sentButton: str,
                          sharesButtonStr: str,
                          bookmarksButtonStr: str,
                          eventsButtonStr: str,
                          moderationButtonStr: str,
                          newPostButtonStr: str,
                          baseDir: str,
                          nickname: str, domain: str,
                          timelineStartTime,
                          newCalendarEvent: bool,
                          calendarPath: str,
                          calendarImage: str,
                          followApprovals: str,
                          iconsAsButtons: bool) -> 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
    tlStr = '<div class="containerHeader"><nav>\n'
    # first button
    if defaultTimeline == 'tlmedia':
        tlStr += \
            '<a href="' + usersPath + \
            '/tlmedia"><button class="' + \
            mediaButton + '"><span>' + translate['Media'] + \
            '</span></button></a>'
    elif defaultTimeline == 'tlblogs':
        tlStr += \
            '<a href="' + usersPath + \
            '/tlblogs"><button class="' + \
            blogsButton + '"><span>' + translate['Blogs'] + \
            '</span></button></a>'
    elif defaultTimeline == 'tlfeatures':
        tlStr += \
            '<a href="' + usersPath + \
            '/tlfeatures"><button class="' + \
            featuresButton + '"><span>' + translate['Features'] + \
            '</span></button></a>'
    else:
        tlStr += \
            '<a href="' + usersPath + \
            '/inbox"><button class="' + \
            inboxButton + '"><span>' + \
            translate['Inbox'] + '</span></button></a>'

    # if this is a news instance and we are viewing the news timeline
    featuresHeader = False
    if defaultTimeline == 'tlfeatures' and boxName == 'tlfeatures':
        featuresHeader = True

    if not featuresHeader:
        tlStr += \
            '<a href="' + usersPath + \
            '/dm"><button class="' + dmButton + \
            '"><span>' + htmlHighlightLabel(translate['DM'], newDM) + \
            '</span></button></a>'

        repliesIndexFilename = \
            baseDir + '/accounts/' + \
            nickname + '@' + domain + '/tlreplies.index'
        if os.path.isfile(repliesIndexFilename):
            tlStr += \
                '<a href="' + usersPath + '/tlreplies"><button class="' + \
                repliesButton + '"><span>' + \
                htmlHighlightLabel(translate['Replies'], newReply) + \
                '</span></button></a>'

    # typically the media button
    if defaultTimeline != 'tlmedia':
        if not minimal and not featuresHeader:
            tlStr += \
                '<a href="' + usersPath + \
                '/tlmedia"><button class="' + \
                mediaButton + '"><span>' + translate['Media'] + \
                '</span></button></a>'
    else:
        if not minimal:
            tlStr += \
                '<a href="' + usersPath + \
                '/inbox"><button class="' + \
                inboxButton+'"><span>' + translate['Inbox'] + \
                '</span></button></a>'

    if not featuresHeader:
        # typically the blogs button
        # but may change if this is a blogging oriented instance
        if defaultTimeline != 'tlblogs':
            if not minimal:
                titleStr = translate['Blogs']
                if defaultTimeline == 'tlfeatures':
                    titleStr = translate['Article']
                tlStr += \
                    '<a href="' + usersPath + \
                    '/tlblogs"><button class="' + \
                    blogsButton + '"><span>' + titleStr + \
                    '</span></button></a>'
        else:
            if not minimal:
                tlStr += \
                    '<a href="' + usersPath + \
                    '/inbox"><button class="' + \
                    inboxButton + '"><span>' + translate['Inbox'] + \
                    '</span></button></a>'

    # typically the news button
    # but may change if this is a news oriented instance
    if defaultTimeline == 'tlfeatures':
        if not featuresHeader:
            tlStr += \
                '<a href="' + usersPath + \
                '/inbox"><button class="' + \
                inboxButton + '"><span>' + translate['Inbox'] + \
                '</span></button></a>'

    # show todays events buttons on the first inbox page
    happeningStr = ''
    if boxName == 'inbox' and pageNumber == 1:
        if todaysEventsCheck(baseDir, nickname, domain):
            now = datetime.now()

            # happening today button
            if not iconsAsButtons:
                happeningStr += \
                    '<a href="' + usersPath + '/calendar?year=' + \
                    str(now.year) + '?month=' + str(now.month) + \
                    '?day=' + str(now.day) + '">' + \
                    '<button class="buttonevent">' + \
                    translate['Happening Today'] + '</button></a>'
            else:
                happeningStr += \
                    '<a href="' + usersPath + '/calendar?year=' + \
                    str(now.year) + '?month=' + str(now.month) + \
                    '?day=' + str(now.day) + '">' + \
                    '<button class="button">' + \
                    translate['Happening Today'] + '</button></a>'

            # happening this week button
            if thisWeeksEventsCheck(baseDir, nickname, domain):
                if not iconsAsButtons:
                    happeningStr += \
                        '<a href="' + usersPath + \
                        '/calendar"><button class="buttonevent">' + \
                        translate['Happening This Week'] + '</button></a>'
                else:
                    happeningStr += \
                        '<a href="' + usersPath + \
                        '/calendar"><button class="button">' + \
                        translate['Happening This Week'] + '</button></a>'
        else:
            # happening this week button
            if thisWeeksEventsCheck(baseDir, nickname, domain):
                if not iconsAsButtons:
                    happeningStr += \
                        '<a href="' + usersPath + \
                        '/calendar"><button class="buttonevent">' + \
                        translate['Happening This Week'] + '</button></a>'
                else:
                    happeningStr += \
                        '<a href="' + usersPath + \
                        '/calendar"><button class="button">' + \
                        translate['Happening This Week'] + '</button></a>'

    if not featuresHeader:
        # button for the outbox
        tlStr += \
            '<a href="' + usersPath + \
            '/outbox"><button class="' + \
            sentButton + '"><span>' + translate['Outbox'] + \
            '</span></button></a>'

        # add other buttons
        tlStr += \
            sharesButtonStr + bookmarksButtonStr + eventsButtonStr + \
            moderationButtonStr + happeningStr + newPostButtonStr

    if not featuresHeader:
        if not iconsAsButtons:
            # the search icon
            tlStr += \
                '<a class="imageAnchor" href="' + usersPath + \
                '/search"><img loading="lazy" src="/' + \
                'icons/search.png" title="' + \
                translate['Search and follow'] + '" alt="| ' + \
                translate['Search and follow'] + \
                '" class="timelineicon"/></a>'
        else:
            # the search button
            tlStr += \
                '<a href="' + usersPath + \
                '/search"><button class="button">' + \
                '<span>' + translate['Search'] + \
                '</span></button></a>'

    # benchmark 5
    timeDiff = int((time.time() - timelineStartTime) * 1000)
    if timeDiff > 100:
        print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff))

    # the calendar button
    if not featuresHeader:
        calendarAltText = translate['Calendar']
        if newCalendarEvent:
            # indicate that the calendar icon is highlighted
            calendarAltText = '*' + calendarAltText + '*'
        if not iconsAsButtons:
            tlStr += \
                '      <a class="imageAnchor" href="' + \
                usersPath + calendarPath + \
                '"><img loading="lazy" src="/icons/' + \
                calendarImage + '" title="' + translate['Calendar'] + \
                '" alt="| ' + calendarAltText + \
                '" class="timelineicon"/></a>\n'
        else:
            tlStr += \
                '<a href="' + usersPath + calendarPath + \
                '"><button class="button">' + \
                '<span>' + translate['Calendar'] + \
                '</span></button></a>'

    if not featuresHeader:
        # the show/hide button, for a simpler header appearance
        if not iconsAsButtons:
            tlStr += \
                '      <a class="imageAnchor" href="' + \
                usersPath + '/minimal' + \
                '"><img loading="lazy" src="/icons' + \
                '/showhide.png" title="' + translate['Show/Hide Buttons'] + \
                '" alt="| ' + translate['Show/Hide Buttons'] + \
                '" class="timelineicon"/></a>\n'
        else:
            tlStr += \
                '<a href="' + usersPath + '/minimal' + \
                '"><button class="button">' + \
                '<span>' + translate['Show/Hide Buttons'] + \
                '</span></button></a>'

    if featuresHeader:
        tlStr += \
            '<a href="' + usersPath + '/inbox">' + \
            '<button class="button">' + \
            '<span>' + translate['User'] + '</span></button></a>'

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

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

    if featuresHeader:
        tlStr += \
            '<a href="' + usersPath + '/editprofile">' + \
            '<button class="buttonDesktop">' + \
            '<span>' + translate['Settings'] + '</span></button></a>'

    if not featuresHeader:
        tlStr += followApprovals

    if not iconsAsButtons:
        # end of headericons div
        tlStr += '</div>'

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