
/*
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;
        
        static int minDigitsD_Number;
        static int minDigitsM_Number;
        
        static String minDigitsD_String;
        static String minDigitsM_String;
        
        
    public static void checkPalindrome(String finalDate)
    {
        StringBuffer sb = new StringBuffer(finalDate);
        System.out.println("This is string reversed: " + sb.reverse());
        
        if (finalDate.equals(sb.reverse()))
        {
            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/2021", 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);     // this gets date portion
        ddInt = Integer.valueOf(ddString);  //converted into integer
        
        System.out.println("This is ddInt: " + ddInt);
        
        mmString = date.substring(3,5);      // this gets month portion
        mmInt = Integer.valueOf(mmString);     // 01 to 12
        
        System.out.println("This is mmString: " + mmString);
        
        
        //if (ddInt<10)         // if date is less than 10
        //{
            minDigitsM_Number = mmInt;    // 1 also has to be subtraced since this will be used in enum values 0 index based
            
        //}
        
        if (mmInt<10)
        {
          minDigitsM_Number = Integer.valueOf(mmString.substring(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
            
            
            System.out.println("NOW: " + minDigitsD_Number);
            
            System.out.println("SASSS: " + minDigitsD_Number);
            
            int getM = m.values()[minDigitsM_Number].month;
            
            
            String getMonth = m.values()[getM].name();
            
            System.out.println("What is MM: " + getM);
            System.out.println("What is month: " + getMonth);
            
            palindromicDates("01/12/2021", 100);
            
            
            switch (mmString)
            {
                case "01":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                    System.out.println(m.values()[0].name());
                    break;
                    
                case "02":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                    System.out.println(m.values()[1].name());
                    break;
                    
                case "03":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                     System.out.println(m.values()[2].name());
                    break;
                    
                case "04":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                     System.out.println(m.values()[3].name());
                    break;
                    
                case "05":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                     System.out.println(m.values()[4].name());
                    break;
                    
                 case "06":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                     System.out.println(m.values()[5].name());
                    break;
                    
                    case "07":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                     System.out.println(m.values()[6].name());
                    break;
                    
                    case "08":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                     System.out.println(m.values()[7].name());
                    break;
                    
                    case "09":
                    formattedMonth = prefixZero.toString() + Integer.toString(getM);
                     System.out.println(m.values()[8].name());
                    break;
                    
                    case "10":
                    formattedMonth =  Integer.toString(getM);
                     System.out.println(m.values()[9].name());
                    break;
                    
                    case "11":
                    formattedMonth = Integer.toString(getM);
                    System.out.println(m.values()[10].name());
                    break;
                    
                    case "12":
                    formattedMonth = Integer.toString(getM);
                    System.out.println(m.values()[11].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;
    }
    
}
