"""Workflow for students.
"""
import grok
from datetime import datetime
from zope.component import getUtility
from hurry.workflow.workflow import Transition, WorkflowState, NullCondition
from hurry.workflow.interfaces import IWorkflowState, IWorkflowTransitionEvent
from waeup.kofa.interfaces import (
    IObjectHistory, IKofaWorkflowInfo, IKofaUtils,
    CREATED, ADMITTED, CLEARANCE, REQUESTED, CLEARED, PAID, RETURNING,
    REGISTERED, VALIDATED, GRADUATED, TRANSCRIPT)
from waeup.kofa.interfaces import MessageFactory as _
from waeup.kofa.workflow import KofaWorkflow, KofaWorkflowInfo
from waeup.kofa.students.interfaces import IStudent, IStudentsUtils
from waeup.kofa.students.workflow import RegistrationWorkflowInfo


REGISTRATION_TRANSITIONS = (
    Transition(
        transition_id = 'create',
        title = _('Create customer'),
        source = None,
        condition = NullCondition,
        msg = _('Record created'),
        destination = CREATED),

    Transition(
        transition_id = 'admit',
        title = _('Approve subscription'),
        msg = _('Subscription approved'),
        source = CREATED,
        destination = CLEARED),

    Transition(
        transition_id = 'reset1',
        title = _('Reset customer to initial state'),
        msg = _('Reset to initial state'),
        source = CLEARED,
        destination = CREATED),

    Transition(
        transition_id = 'pay_first_school_fee',
        title = _('Pay first meter fee'),
        msg = _('First meter fee payment made'),
        source = CLEARED,
        destination = PAID),

    Transition(
        transition_id = 'approve_first_school_fee',
        title = _('Approve first meter payment'),
        msg = _('First meter fee payment approved'),
        source = CLEARED,
        destination = PAID),

    # The pg fee payment has proper handlers which suit
    # customer payments.

    Transition(
        transition_id = 'pay_pg_fee',
        title = _('Pay meter fee'),
        msg = _('Meter fee paid'),
        source = PAID,
        destination = PAID),

    Transition(
        transition_id = 'approve_pg_fee',
        title = _('Approve meter fee payment'),
        msg = _('Meter fee payment approved'),
        source = PAID,
        destination = PAID),

    Transition(
        transition_id = 'reset2',
        title = _("Reset customer to state 'subscription approved'"),
        msg = _("Reset to state 'subscription approved'"),
        source = PAID,
        destination = CLEARED),
    )


registration_workflow = KofaWorkflow(REGISTRATION_TRANSITIONS)

class CustomRegistrationWorkflowInfo(RegistrationWorkflowInfo):
    """Adapter to adapt Student objects to workflow info objects.
    """

    def __init__(self, context):
        self.context = context
        self.wf = registration_workflow
