/********************************************************************
 * Copyright © 2005 VHA. All rights reserved
 ********************************************************************/
package gov.va.med.esr.service.trigger;

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

import gov.va.med.esr.common.model.comms.AacLetterRequest;
import gov.va.med.esr.common.model.lookup.ComLetterTemplateType;

/**
 * Defines the data types for letter entities.
 *
 * @author Andrew Pach
 * @version 3.0
 */
public interface LetterTrigger extends CommonTrigger
{ 
    /**
     * Contains all known data types for Letter TriggerEvents (i.e. the various form numbers).
     */
    public class DataType extends Enum
    {
        /**
		 * 
		 */
		private static final long serialVersionUID = 4556658436820414401L;
		
		public static final DataType FORM_NUMBER_400H = new DataType(ComLetterTemplateType.FORM_NUMBER_400H);
		public static final DataType FORM_NUMBER_400B = new DataType(ComLetterTemplateType.FORM_NUMBER_400B);
		public static final DataType FORM_NUMBER_400F = new DataType(ComLetterTemplateType.FORM_NUMBER_400F);
		
		public static final DataType FORM_NUMBER_600A = new DataType(ComLetterTemplateType.FORM_NUMBER_600A);
        public static final DataType FORM_NUMBER_600B = new DataType(ComLetterTemplateType.FORM_NUMBER_600B);
        public static final DataType FORM_NUMBER_600C = new DataType(ComLetterTemplateType.FORM_NUMBER_600C);
        public static final DataType FORM_NUMBER_600D = new DataType(ComLetterTemplateType.FORM_NUMBER_600D);
        
        public static final DataType FORM_NUMBER_601A = new DataType(ComLetterTemplateType.FORM_NUMBER_601A);
        public static final DataType FORM_NUMBER_601B = new DataType(ComLetterTemplateType.FORM_NUMBER_601B);
        public static final DataType FORM_NUMBER_601C = new DataType(ComLetterTemplateType.FORM_NUMBER_601C);
        public static final DataType FORM_NUMBER_601D = new DataType(ComLetterTemplateType.FORM_NUMBER_601D);
        public static final DataType FORM_NUMBER_601E = new DataType(ComLetterTemplateType.FORM_NUMBER_601E);
        public static final DataType FORM_NUMBER_601F = new DataType(ComLetterTemplateType.FORM_NUMBER_601F);
        
        public static final DataType FORM_NUMBER_604A = new DataType(ComLetterTemplateType.FORM_NUMBER_604A);
        public static final DataType FORM_NUMBER_604B = new DataType(ComLetterTemplateType.FORM_NUMBER_604B);
        
        public static final DataType FORM_NUMBER_607A = new DataType(ComLetterTemplateType.FORM_NUMBER_607A);
        public static final DataType FORM_NUMBER_607B = new DataType(ComLetterTemplateType.FORM_NUMBER_607B);
        
        public static final DataType FORM_NUMBER_620A = new DataType(ComLetterTemplateType.FORM_NUMBER_620A);
        public static final DataType FORM_NUMBER_620B = new DataType(ComLetterTemplateType.FORM_NUMBER_620B);
        
        public static final DataType FORM_NUMBER_623A = new DataType(ComLetterTemplateType.FORM_NUMBER_623A);

        //Subsequent Rejection Letter ESR 3.6_CodeCR10108
        public static final DataType FORM_NUMBER_623C = new DataType(ComLetterTemplateType.FORM_NUMBER_623C);

        public static final DataType FORM_NUMBER_623D = new DataType(ComLetterTemplateType.FORM_NUMBER_623D);
        public static final DataType FORM_NUMBER_623R = new DataType(ComLetterTemplateType.FORM_NUMBER_623R);
        public static final DataType FORM_NUMBER_624A = new DataType(ComLetterTemplateType.FORM_NUMBER_624A);
        public static final DataType FORM_NUMBER_624B = new DataType(ComLetterTemplateType.FORM_NUMBER_624B);
        public static final DataType FORM_NUMBER_624C = new DataType(ComLetterTemplateType.FORM_NUMBER_624C);
        
        public static final DataType FORM_NUMBER_625A = new DataType(ComLetterTemplateType.FORM_NUMBER_625A);
        public static final DataType FORM_NUMBER_625B = new DataType(ComLetterTemplateType.FORM_NUMBER_625B);
        public static final DataType FORM_NUMBER_625C = new DataType(ComLetterTemplateType.FORM_NUMBER_625C);
        
        public static final DataType FORM_NUMBER_630A = new DataType(ComLetterTemplateType.FORM_NUMBER_630A);
        public static final DataType FORM_NUMBER_630B = new DataType(ComLetterTemplateType.FORM_NUMBER_630B);
        public static final DataType FORM_NUMBER_630C = new DataType(ComLetterTemplateType.FORM_NUMBER_630C);
        public static final DataType FORM_NUMBER_630D = new DataType(ComLetterTemplateType.FORM_NUMBER_630D);
        public static final DataType FORM_NUMBER_630E = new DataType(ComLetterTemplateType.FORM_NUMBER_630E);
        public static final DataType FORM_NUMBER_630F = new DataType(ComLetterTemplateType.FORM_NUMBER_630F);
        public static final DataType FORM_NUMBER_630G = new DataType(ComLetterTemplateType.FORM_NUMBER_630G);
        public static final DataType FORM_NUMBER_630H = new DataType(ComLetterTemplateType.FORM_NUMBER_630H);
        
        public static final DataType FORM_NUMBER_640A = new DataType(ComLetterTemplateType.FORM_NUMBER_640A);
        public static final DataType FORM_NUMBER_640B = new DataType(ComLetterTemplateType.FORM_NUMBER_640B);
        public static final DataType FORM_NUMBER_640C = new DataType(ComLetterTemplateType.FORM_NUMBER_640C);
        public static final DataType FORM_NUMBER_640V = new DataType(ComLetterTemplateType.FORM_NUMBER_640V);
        public static final DataType FORM_NUMBER_640D = new DataType(ComLetterTemplateType.FORM_NUMBER_640D);
        public static final DataType FORM_NUMBER_640F = new DataType(ComLetterTemplateType.FORM_NUMBER_640F);
        public static final DataType FORM_NUMBER_640G = new DataType(ComLetterTemplateType.FORM_NUMBER_640G);
        public static final DataType FORM_NUMBER_640H = new DataType(ComLetterTemplateType.FORM_NUMBER_640H);
        public static final DataType FORM_NUMBER_640I = new DataType(ComLetterTemplateType.FORM_NUMBER_640I);
        
        //Public Law ESR 3.5_CodeCR10680
        public static final DataType FORM_NUMBER_640K = new DataType(ComLetterTemplateType.FORM_NUMBER_640K);
        
        public static final DataType FORM_NUMBER_650A = new DataType(ComLetterTemplateType.FORM_NUMBER_650A);
        
        public static final DataType FORM_NUMBER_290 = new DataType(ComLetterTemplateType.FORM_NUMBER_290);
        public static final DataType FORM_NUMBER_291 = new DataType(ComLetterTemplateType.FORM_NUMBER_291);
        public static final DataType FORM_NUMBER_292 = new DataType(ComLetterTemplateType.FORM_NUMBER_292);
        public static final DataType FORM_NUMBER_293 = new DataType(ComLetterTemplateType.FORM_NUMBER_293);
        public static final DataType FORM_NUMBER_298 = new DataType(ComLetterTemplateType.FORM_NUMBER_298);
        public static final DataType FORM_NUMBER_299 = new DataType(ComLetterTemplateType.FORM_NUMBER_299);
        

        private DataType(ComLetterTemplateType.Code lookupCodeObj)
        {
            super(lookupCodeObj.getCode());
        }
    }
    
	public class CategoryType extends Enum {
		/**
		 * 
		 */
		private static final long serialVersionUID = -1243667336000426194L;
		public static final CategoryType VETERAN_LETTER = new CategoryType(AacLetterRequest.VETERAN_LETTER);
		public static final CategoryType SPOUSE_LETTER = new CategoryType(AacLetterRequest.SPOUSE_LETTER);
		public static final CategoryType DEPENDENT_LETTER = new CategoryType(AacLetterRequest.DEPENDENT_LETTER);
        private CategoryType(String code)
        {
            super(code);
        }		
	}
}
