#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, time, platform, calendar, subprocess as sp
from datetime import date

# from https://github.com/bear/parsedatetime
import parsedatetime as pdt
def print_parsedatetime_test_conversions(natural_langage_dates_list):
    cal = pdt.Calendar()
    for date in natural_langage_dates_list:
        (struct_time_date, success) = cal.parse(date)
        if success:
            formal_date = time.strftime('%Y-%m-%d', struct_time_date)
        else:
            formal_date = '(conversion failed)'
        print '{0:>15s} -> {1:10s}'.format(date, formal_date)

def print_OS_info():
    if platform.system() == 'Windows':
        sys.exit()
    cmds = [ 'python --version', 'pip show parsedatetime', 'uname -a' ]
    if platform.system() == 'Darwin':
        cmds.append('sw_vers')
    if platform.system() == 'Linux':
        cmds.append('lsb_release -a')
    for cmd in cmds:
        print "'$ " + cmd + "':"
        p = sp.Popen(cmd, shell=True)
        p.communicate()
        print

def print_todays_date():
    todays_day_of_week = calendar.day_name[date.today().weekday()]
    print "today's date = " + todays_day_of_week + ', ' + \
                              time.strftime('%Y-%m-%d') + '\n'

example_natural_langage_dates_list = \
[
    '-1 thursday',
    'last thursday',
    '-1 thursday',
    '- thursday',
    '-thursday',
    '1 thursday',
    '+1 thursday',
    'last thursday',
    'next thursday',
    'monday',
    '-1 monday',
    'last monday',
    '-1 monday',
    '-2 monday',
    '- monday',
    'monday',
    '-1 sunday',
    '- sunday',
    'sunday',
    'last sat',
    'tomorrow',
    'yesterday',
    '- days',
    '- day',
    '-1d',
    '2d',
    '16month',
    '-16month',
    '6 months',
    '3y',
    '-1 days',
    '-3 days',
    ' 3 d',
    '-2 months',
    ' 2 month',
    '-1 years',
    ' 1 yrs',
    ' 1 yr',
    '-2 yr',
    'thur',
    'thu',
    'th',
    'mon',
    'monday',
    'next monday',
    'next tues',
    'last tues',
    '-3 tues',
]

print_OS_info()
print_todays_date()
print_parsedatetime_test_conversions(example_natural_langage_dates_list)