package gov.va.med.esr.common.clock;



// Java classes
import java.io.Serializable;

import org.apache.commons.lang.enums.Enum;

import gov.va.med.esr.common.batchprocess.BatchProcessTriggerGroups;

// Framework classes

// ESR classes

/**
 * Defines the types of application clocks.
 * 
 * @author DNS   RUIZC
 * @version 3.0
 */
public interface Clock extends Serializable {
    
    /**
     * Contains all known clock types.
     */
    public class Type extends Enum
    {
        /**
         * 
         */
        private static final long serialVersionUID = -3804703029814849737L;
        
        public static final Type PH_37_DAY_CLOCK =
            new Type("PH_37_DAY_CLOCK");
        public static final Type PH_14_DAY_CLOCK =
            new Type("PH_14_DAY_CLOCK");
        public static final Type SSN_30_DAY_VALIDATION_CLOCK =
            new Type("SSN_30_DAY_VALIDATION_CLOCK");
        public static final Type SSN_30_DAY_PSEUDO_SSN_REASON_CLOCK =
            new Type("SSN_30_DAY_PSEUDO_SSN_REASON_CLOCK");        
        public static final Type SSN_30_DAY_PSEUDO_SSN_VERIFICATION_CLOCK =
            new Type("SSN_30_DAY_PSEUDO_SSN_VERIFICATION_CLOCK");        
        public static final Type SSN_45_DAY_CLOCK =
            new Type("SSN_45_DAY_CLOCK");
        
        public static final Type VOA_3_DAY_CLOCK =
        	new Type("VOA_3_DAY_CLOCK");
        
        public static final Type WF_72_HOUR_CLOCK = new Type("WF_72_HOUR_CLOCK");
        
        public static final Type Z11_10_MIN_CLOCK = new Type("Z11_10_MIN_CLOCK");
       
        private Type(String name)
        {
            super(name);
        }
    }
    
    public class Group extends Enum
    {
        /**
         * 
         */
        private static final long serialVersionUID = 2933992807165009127L;
        
        public static final Group PH_CLOCK_GROUP =
            new Group(BatchProcessTriggerGroups.DYNAMIC_PH_CLOCK);
        public static final Group SSN_CLOCK_GROUP =
            new Group(BatchProcessTriggerGroups.DYNAMIC_SSN_CLOCK);
        
        public static final Group VOA_CLOCK_GROUP =
        	new Group("VOA_CLOCK_GROUP");

        public static final Group WF_CLOCK_GROUP =
            new Group(BatchProcessTriggerGroups.DYNAMIC_WF_CLOCK);
        
        public static final Group Z11_CLOCK_GROUP =
            new Group(BatchProcessTriggerGroups.DYNAMIC_Z11_CLOCK);

        private Group(String name)
        {
            super(name);
        }
    }
    
    public class Data extends Enum
    {
        /**
         * 
         */
        private static final long serialVersionUID = 2933992807165009127L;
        
        public static final Data PERSON_ID =
            new Data("PERSON_ID");
        public static final Data CLOCK_TYPE =
            new Data("CLOCK_TYPE");
        
        
        private Data(String name)
        {
            super(name);
        }
    }    
}
