# This file is meant to sit in ~ for use from all shells.
# ln -s ~/dotfiles/files/ts/tasks.py ~/tasks.py 

from invoke import task

from datetime import datetime as dt
import os

HOME = os.path.expanduser('~')

TODAY = dt.now().strftime('%Y.%m.%d')
MONTH = dt.now().strftime('%m')
YEAR = dt.now().strftime('%Y')
JOURNAL = f"{HOME}/Journal/{YEAR}"

SECDEV_LIMITED=os.environ.get('SECDEV_LIMITED')
SECDEV_MESSAGE_TEMPLATES=os.environ.get('SECDEV_MESSAGE_TEMPLATES')
EPICS=os.environ.get('URL_EPICS')
MESSAGE_TEMPLATES=os.environ.get('URL_MESSAGE_TEMPLATES')
OLLAMA=os.environ.get('OLLAMA')

# Helper functions for a consistent experience

@task 
def journal(c):
    code(c, f'{HOME}/Journal')


def browse(c, url):
    c.run(f"firefox {url}", asynchronous=True)


def code(c, path):
    # c.run(f"codium {path}", asynchronous=True)
    c.run(f"vi {path}", pty=True)


def folder(c, path):
    c.run(f"nemo {path}")



@task
def debug(c):
    result = c.run('which minetest')
    print(result.ok)


@task()
def dash(c):
    c.run('wtfutil')

@task
def calendar_week(c):
    browse(c, "https://outlook.office.com/calendar/view/week")


@task
def vasl(c):
    '''Submit time off'''
    browse(c, "https://my.techservices.illinois.edu/vacation/submitdays.asp")
    browse(c, "https://outlook.office.com/calendar/view/week")
    print('Ctrl+G to repeat a search in FF')


@task(vasl)
def timesheets(c):
    '''Reconcile time off between reporting systems'''
    browse(c, "https://outlook.office.com/calendar/view/month")
    code(c, f"{HOME}/src/Learn_RobotFramework_IllinoisPTR")
    browse(c, "http://go.illinois.edu/techservtimeentry")

@task()
def daily(c):
    '''Open daily reminders file for this month'''
    code(c, f'{JOURNAL}/{MONTH}-daily.md')



@task()
def in_progress(c):
    '''Show in progress items on the Kan-Ban board'''
    browse(c, 'https://github.com/orgs/techservicesillinois/projects/10/views/11')


@task(daily, in_progress)
def status(c):
    '''Check on status of priorities'''
    browse(c, EPICS)
    dash(c)
    pass



@task
def backlog(c):
    '''Prep for backlog grooming'''
    browse(c, 'https://github.com/orgs/techservicesillinois/projects/10/views/7')


@task(journal)
def retro(c):
    '''Prep for team retrospective meeting'''

    # Create and open retro notes file
    retro_file = f'{JOURNAL}/{TODAY}.Retro.md'
    if(not os.path.exists(retro_file)):
       c.run(f'{HOME}/envs/jinja/bin/jinja2 -D DATE={TODAY} {JOURNAL}/Retro.Template.md > {retro_file}')
    code(c, retro_file)

    # Close issues this sprint
    browse(c, 'https://github.com/orgs/techservicesillinois/projects/10/views/5')

    # Shared folder for archiving Retro notes
    browse(c, SECDEV_LIMITED)


@task(journal)
def engagements_ods(c):
    '''For recording engagements'''
    c.run(f'soffice {JOURNAL}/Data/engagements.ods', asynchronous=True)
    # TODO: Launch Jupyter container on this folder as well

@task
def gather_data(c):
    raise NotImplementedError()
    # TODO: Add GH command to gather latest data files.


@task(engagements_ods)
def wins(c):
    '''For recording team wins'''
    code(c, f'{JOURNAL}/{YEAR}-Wins.md')

@task
def co_authors(c):
    browse(c, 'https://github.com/orgs/techservicesillinois/projects/10?pane=info')

@task
def limited(c):
    browse(c, SECDEV_LIMITED)

@task(engagements_ods, calendar_week)
def engage(c):
    # Cybersecrity Development Message Templates
    browse(c, SECDEV_MESSAGE_TEMPLATES)


@task
def juice_shop(c):
    '''Run a copy of intentionally vulnerable OWASP Juice Shop web app, for demonstrations'''
    c.run('podman run -d -p 3000:3000 bkimminich/juice-shop', asynchronous=True)
    print('Visit localhost:3000 for juice shop.')


@task
def bookmarks(c):
    code(c, f'{JOURNAL}/bookmarks.md')


@task
def message_templates(c):
    browse(c, MESSAGE_TEMPLATES)

@task
def ollama(c):
    print(f'ssh -t {OLLAMA} "ollama run glm-4.7-flash"')


