#!/usr/bin/env python

import os
import sys

version = "0.10"
program = os.path.basename(sys.argv[0])
progdir = os.path.dirname(sys.argv[0])

# boilerplate
basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
sys.path = [ basedir ] + sys.path
os.environ["DJANGO_SETTINGS_MODULE"] = "ietf.settings"

virtualenv_activation = os.path.join(basedir, "env", "bin", "activate_this.py")
if os.path.exists(virtualenv_activation):
    execfile(virtualenv_activation, dict(__file__=virtualenv_activation))


# ----------------------------------------------------------------------
def note(string):
    sys.stdout.write("%s\n" % (string))
    
# ----------------------------------------------------------------------
def warn(string):
    sys.stderr.write(" * %s\n" % (string))
    
# ------------------------------------------------------------------------------

import re
from datetime import datetime as Datetime

import django
django.setup()

from django.conf import settings

from ietf.utils.path import path as Path
from ietf.doc.models import Document, NewRevisionDocEvent
from ietf.person.models import Person

system_entity = Person.objects.get(name="(System)")

charterdir = Path(settings.CHARTER_PATH)
for file in charterdir.files("charter-ietf-*.txt"):
    fname = file.name
    ftime = Datetime.fromtimestamp(file.mtime)
    match = re.search("^(?P<name>[a-z0-9-]+)-(?P<rev>\d\d-\d\d)\.txt$", fname)
    if match:
        name = match.group("name")
        rev = match.group("rev")
    else:
        match = re.search("^(?P<name>[a-z0-9-]+)-(?P<rev>\d\d)\.txt$", fname)
        if match:
            name = match.group("name")
            rev = match.group("rev")
        else:
            warn("Failed extracting revision from filename: '%s'" % fname)
    try:
        doc = Document.objects.get(type="charter", name=name)
        try:
            event = NewRevisionDocEvent.objects.get(doc=doc, type='new_revision', rev=rev)
            note(".")
        except NewRevisionDocEvent.MultipleObjectsReturned, e:
            warn("Multiple NewRevisionDocEvent exists for '%s'" % fname)
        except NewRevisionDocEvent.DoesNotExist:
            event = NewRevisionDocEvent(doc=doc, type='new_revision', rev=rev, by=system_entity, time=ftime, desc="")
            event.save()
            note("Created new NewRevisionDocEvent for %s-%s" % (name, rev))
    except Document.DoesNotExist:
        warn("Document not found: '%s'; no NewRevisionDocEvent created for '%s'" % (name, fname))
    
