
/*
Online Java - IDE, Code Editor, Compiler

Online Java is a quick and easy tool that helps you to build, compile, test your programs online.
*/

abstract class checkDate
{
    //abstract void createDate();
    //abstract void checkPalindrome();
    //abstract void checkLeapYear();
    
}


public class Main extends checkDate
{
        static int year;
        static String yearString;
        static String finalDate;
        static Object days;
        static Object month;
        static Object objectLeapYearFebruaryDays;
        static int intLeapYearFebruaryDays;
        static boolean leapYear;
        static String temp;
        static Object prefixZero = "0";
        static int daysMonth;
        static int monthcount;
        static String formattedMonth;
        static int ddInt;
        static String ddString;
        
        static int mmInt;
        static String mmString;
        
        
    public static void checkPalindrome(String finalDate)
    {
        StringBuffer sb = new StringBuffer(finalDate);
        System.out.println("This is string reversed: " + sb.reverse());
        
        if (sb.reverse().toString()==finalDate)
        {
            System.out.println("PALINDROME!!!!");
        }
        
    }
    
    
    enum Months
    {
        JAN (31,1), FEB(28,2) ,MAR(31,3),APR(30,4),MAY(31,5),JUN(30,6), JUL(31,7), AUG(31,8), SEPT(30,9),OCT(31,10), NOV(30,11),DEC(31,12);
        
        public int days;
        public int month;
        
        Months (int days, int month)
        {
            this.days=days;
            this.month=month;
        }
    }
    
   
    public static void main(String[] args) {
        System.out.println("Welcome to Online IDE!! Happy Coding :)");
        
        palindromicDates("01/12/2121", 100);
    }
    
    public static int palindromicDates (String date, int years)
    {
        int startPos = date.length()-4;
        
        createDate(startPos, date);
        return 1;
    }
    
    
    public static void createDate(int startPos, String date)
    {
        yearString = date.substring(startPos, date.length());
        
        year = Integer.valueOf(yearString);
        
        // for every year
        
        ddString = date.substring(0,2);
        ddInt = Integer.valueOf(ddString);
        
        mmString = date.substring(3,5); 
        mmInt = Integer.valueOf(mmString);
        
        System.out.println("valjue mmint: " + mmInt);
        
        //if (mmInt<10)
        //{
          //  mmString = date.substring(4);
            mmInt = Integer.valueOf(mmString) - 1;
        //}
        
        
        for (int i=0; i<2; i++)    //if i is two  and   12 months do while   = 48times processing months = 4 years
        
        // perhaps need to flip the days first and then months nested inside?
        
        {
            leapYear=false;
            
            System.out.println("This is the year: " + year);
            
            //for every month in n years
            
            do
            {
            
            // for every month   (can not nest something inside here.......)
            for (Months m: Months.values())
        {
            System.out.println("How many times!!");   // this runs 12 times
            
            /*
            if (m.name()=="NOVEMBER")  // need a switch statement here... to ensure that a prefix of 0 is inserted 
            //for months January - September
            {
                
            }
            */
            
            //int getMM = m.values()[5].month;
            //String getMonth = m.values()[5].name();
            
            //System.out.println("What is tt: " + getMM);
            //System.out.println("What is tt: " + getMonth);
            
            //if ()
            
            
            switch (mmString)
            {
                case "01":
                    formattedMonth = "01";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                case "02":
                    formattedMonth = "02";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                case "03":
                    formattedMonth = "03";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                case "04":
                    formattedMonth = "04";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                case "05":
                    formattedMonth = "05";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                 case "06":
                    formattedMonth = "06";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                    case "07":
                    formattedMonth = "07";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                    case "08":
                    formattedMonth = "08";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                    case "09":
                    formattedMonth = "09";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                    case "10":
                    formattedMonth = "10";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                    case "11":
                    formattedMonth = "11";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
                    case "12":
                    formattedMonth = "12";
                    System.out.println(m.values()[mmInt].name());
                    break;
                    
            }
            
            
            
            if (year%4==0)    //leap year
            {
                objectLeapYearFebruaryDays = m.FEB.days;
                
                intLeapYearFebruaryDays = (int) (objectLeapYearFebruaryDays)+1;
                
                leapYear=true;
                
            }
            
            //System.out.println("This is the month:" + m.name());
            
            days = m.days;
            
            
            if (m.name()=="FEB" && leapYear)
            {
                
                //intDaysFebruaryLeap = (int) days + 1;
                
                days = (Object) intLeapYearFebruaryDays;
                
            }
            if (leapYear)
            {
                System.out.println("LEAP YEAR!!!!!");
            }
            
            // for every day
            
            daysMonth = (int) days;
            
            
            for (int k=ddInt; k<(int) daysMonth; k++)     
            {
                System.out.println("*******reach here!!!! " + daysMonth);
                System.out.println("This is k: " + k);
                
                month = m.month;
                temp="";
                
                temp = Integer.toString(k);
                
                if (k<10)
                {
                    //temp is a string of following objects
                    temp = prefixZero.toString() + Integer.toString(k);
                    
                    // the value taken for the day will be cast back to int
                    
                    //aa = Integer.valueOf(temp);
                    // + prefixZero;
                }
                
                System.out.println("This is the day: " + temp);
            
           finalDate = temp + formattedMonth + year;
           
            
            System.out.println("This is final date: " + finalDate);
            
            checkPalindrome(finalDate);
                
            }
            
        }
        
        monthcount++;
        
        }while(monthcount<=12);
        
        year++;    
        }
   
        //return 1;
    }
    
}
