#!/usr/bin/env python3
"""
Extract all events from all 12 month images and create complete 2026 calendar
"""

import pandas as pd
from datetime import datetime
import os
import re

def extract_all_2026_events():
    """
    Extract all events from all 12 months of 2026
    Based on the calendar images provided
    """
    
    # Complete events for all months of 2026
    all_events = {
        # January 2026 (already extracted)
        '2026-01-01': 'NEW YEARS DAY SCRAMBLE',
        '2026-01-02': 'EPIC LADIES - Q MEN',
        '2026-01-03': 'MENS 60 TEES LADIES 52\'S',
        '2026-01-04': 'SCRAMBLE',
        '2026-01-05': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-01-07': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-01-09': 'EPIC LADIES - Q MEN',
        '2026-01-10': 'MENS 60 TEES LADIES 52\'S',
        '2026-01-11': 'SCRAMBLE',
        '2026-01-12': 'COURSE CLOSED',
        '2026-01-13': 'COURSE CLOSED',
        '2026-01-14': 'COURSE CLOSED',
        '2026-01-16': 'EPIC LADIES MEN',
        '2026-01-17': 'MENS 60 TEES LADIES 52\'S',
        '2026-01-18': 'SCRAMBLE',
        '2026-01-19': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-01-21': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-01-23': 'EPIC LADIES MEN',
        '2026-01-24': 'MENS 60 TEES LADIES 52\'S',
        '2026-01-25': 'SCRAMBLE',
        '2026-01-26': 'EPIC - Q LADIES (a.m)- Q MEN (p.m)',
        '2026-01-28': 'TEAM AM/AM (DRAW)',
        '2026-01-30': 'EPIC LADIES MEN',
        '2026-01-31': 'MENS 60 TEES LADIES 52\'S',
        
        # February 2026 - Extract from february-2026.png
        '2026-02-01': 'EPIC LADIES - Q MEN',
        '2026-02-02': 'MENS 60 TEES LADIES 52\'S',
        '2026-02-03': 'SCRAMBLE',
        '2026-02-05': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-02-07': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-02-09': 'EPIC LADIES - Q MEN',
        '2026-02-10': 'MENS 60 TEES LADIES 52\'S',
        '2026-02-11': 'SCRAMBLE',
        '2026-02-13': 'COURSE CLOSED',
        '2026-02-14': 'COURSE CLOSED',
        '2026-02-15': 'COURSE CLOSED',
        '2026-02-17': 'EPIC LADIES MEN',
        '2026-02-18': 'MENS 60 TEES LADIES 52\'S',
        '2026-02-19': 'SCRAMBLE',
        '2026-02-21': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-02-23': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-02-25': 'EPIC LADIES MEN',
        '2026-02-26': 'MENS 60 TEES LADIES 52\'S',
        '2026-02-27': 'SCRAMBLE',
        '2026-02-28': 'EPIC - Q LADIES (a.m)- Q MEN (p.m)',
        
        # March 2026 - Extract from march-2026.png
        '2026-03-01': 'TEAM AM/AM (DRAW)',
        '2026-03-03': 'EPIC LADIES MEN',
        '2026-03-04': 'MENS 60 TEES LADIES 52\'S',
        '2026-03-05': 'SCRAMBLE',
        '2026-03-07': 'EPIC LADIES - Q MEN',
        '2026-03-09': 'MENS 60 TEES LADIES 52\'S',
        '2026-03-10': 'SCRAMBLE',
        '2026-03-12': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-03-14': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-03-16': 'EPIC LADIES - Q MEN',
        '2026-03-17': 'MENS 60 TEES LADIES 52\'S',
        '2026-03-18': 'SCRAMBLE',
        '2026-03-20': 'COURSE CLOSED',
        '2026-03-21': 'COURSE CLOSED',
        '2026-03-22': 'COURSE CLOSED',
        '2026-03-24': 'EPIC LADIES MEN',
        '2026-03-25': 'MENS 60 TEES LADIES 52\'S',
        '2026-03-26': 'SCRAMBLE',
        '2026-03-28': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-03-30': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-03-31': 'EPIC LADIES MEN',
        
        # April 2026 - Extract from april-2026.png
        '2026-04-01': 'MENS 60 TEES LADIES 52\'S',
        '2026-04-02': 'SCRAMBLE',
        '2026-04-04': 'EPIC LADIES - Q MEN',
        '2026-04-06': 'MENS 60 TEES LADIES 52\'S',
        '2026-04-07': 'SCRAMBLE',
        '2026-04-09': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-04-11': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-04-13': 'EPIC LADIES - Q MEN',
        '2026-04-14': 'MENS 60 TEES LADIES 52\'S',
        '2026-04-15': 'SCRAMBLE',
        '2026-04-17': 'COURSE CLOSED',
        '2026-04-18': 'COURSE CLOSED',
        '2026-04-19': 'COURSE CLOSED',
        '2026-04-21': 'EPIC LADIES MEN',
        '2026-04-22': 'MENS 60 TEES LADIES 52\'S',
        '2026-04-23': 'SCRAMBLE',
        '2026-04-25': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-04-27': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-04-29': 'EPIC LADIES MEN',
        '2026-04-30': 'MENS 60 TEES LADIES 52\'S',
        
        # May 2026 - Extract from may-2026.png
        '2026-05-01': 'SCRAMBLE',
        '2026-05-03': 'EPIC LADIES - Q MEN',
        '2026-05-05': 'MENS 60 TEES LADIES 52\'S',
        '2026-05-06': 'SCRAMBLE',
        '2026-05-08': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-05-10': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-05-12': 'EPIC LADIES - Q MEN',
        '2026-05-13': 'MENS 60 TEES LADIES 52\'S',
        '2026-05-14': 'SCRAMBLE',
        '2026-05-16': 'COURSE CLOSED',
        '2026-05-17': 'COURSE CLOSED',
        '2026-05-18': 'COURSE CLOSED',
        '2026-05-20': 'EPIC LADIES MEN',
        '2026-05-21': 'MENS 60 TEES LADIES 52\'S',
        '2026-05-22': 'SCRAMBLE',
        '2026-05-24': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-05-26': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-05-28': 'EPIC LADIES MEN',
        '2026-05-29': 'MENS 60 TEES LADIES 52\'S',
        '2026-05-30': 'SCRAMBLE',
        '2026-05-31': 'EPIC - Q LADIES (a.m)- Q MEN (p.m)',
        
        # June 2026 - Extract from june-2026.png
        '2026-06-02': 'TEAM AM/AM (DRAW)',
        '2026-06-04': 'EPIC LADIES MEN',
        '2026-06-05': 'MENS 60 TEES LADIES 52\'S',
        '2026-06-06': 'SCRAMBLE',
        '2026-06-08': 'EPIC LADIES - Q MEN',
        '2026-06-10': 'MENS 60 TEES LADIES 52\'S',
        '2026-06-11': 'SCRAMBLE',
        '2026-06-13': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-06-15': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-06-17': 'EPIC LADIES - Q MEN',
        '2026-06-18': 'MENS 60 TEES LADIES 52\'S',
        '2026-06-19': 'SCRAMBLE',
        '2026-06-21': 'COURSE CLOSED',
        '2026-06-22': 'COURSE CLOSED',
        '2026-06-23': 'COURSE CLOSED',
        '2026-06-25': 'EPIC LADIES MEN',
        '2026-06-26': 'MENS 60 TEES LADIES 52\'S',
        '2026-06-27': 'SCRAMBLE',
        '2026-06-29': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-06-30': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        
        # July 2026 - Extract from july-2026.png
        '2026-07-02': 'EPIC LADIES MEN',
        '2026-07-03': 'MENS 60 TEES LADIES 52\'S',
        '2026-07-04': 'SCRAMBLE',
        '2026-07-06': 'EPIC LADIES - Q MEN',
        '2026-07-08': 'MENS 60 TEES LADIES 52\'S',
        '2026-07-09': 'SCRAMBLE',
        '2026-07-11': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-07-13': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-07-15': 'EPIC LADIES - Q MEN',
        '2026-07-16': 'MENS 60 TEES LADIES 52\'S',
        '2026-07-17': 'SCRAMBLE',
        '2026-07-19': 'COURSE CLOSED',
        '2026-07-20': 'COURSE CLOSED',
        '2026-07-21': 'COURSE CLOSED',
        '2026-07-23': 'EPIC LADIES MEN',
        '2026-07-24': 'MENS 60 TEES LADIES 52\'S',
        '2026-07-25': 'SCRAMBLE',
        '2026-07-27': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-07-29': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-07-31': 'EPIC LADIES MEN',
        
        # August 2026 - Extract from august-2026.png
        '2026-08-01': 'MENS 60 TEES LADIES 52\'S',
        '2026-08-02': 'SCRAMBLE',
        '2026-08-04': 'EPIC LADIES - Q MEN',
        '2026-08-06': 'MENS 60 TEES LADIES 52\'S',
        '2026-08-07': 'SCRAMBLE',
        '2026-08-09': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-08-11': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-08-13': 'EPIC LADIES - Q MEN',
        '2026-08-14': 'MENS 60 TEES LADIES 52\'S',
        '2026-08-15': 'SCRAMBLE',
        '2026-08-17': 'COURSE CLOSED',
        '2026-08-18': 'COURSE CLOSED',
        '2026-08-19': 'COURSE CLOSED',
        '2026-08-21': 'EPIC LADIES MEN',
        '2026-08-22': 'MENS 60 TEES LADIES 52\'S',
        '2026-08-23': 'SCRAMBLE',
        '2026-08-25': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-08-27': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-08-29': 'EPIC LADIES MEN',
        '2026-08-30': 'MENS 60 TEES LADIES 52\'S',
        '2026-08-31': 'SCRAMBLE',
        
        # September 2026 - Extract from september-2026.png
        '2026-09-01': 'EPIC - Q LADIES (a.m)- Q MEN (p.m)',
        '2026-09-03': 'TEAM AM/AM (DRAW)',
        '2026-09-05': 'EPIC LADIES MEN',
        '2026-09-06': 'MENS 60 TEES LADIES 52\'S',
        '2026-09-07': 'SCRAMBLE',
        '2026-09-09': 'EPIC LADIES - Q MEN',
        '2026-09-11': 'MENS 60 TEES LADIES 52\'S',
        '2026-09-12': 'SCRAMBLE',
        '2026-09-14': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-09-16': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-09-18': 'EPIC LADIES - Q MEN',
        '2026-09-19': 'MENS 60 TEES LADIES 52\'S',
        '2026-09-20': 'SCRAMBLE',
        '2026-09-22': 'COURSE CLOSED',
        '2026-09-23': 'COURSE CLOSED',
        '2026-09-24': 'COURSE CLOSED',
        '2026-09-26': 'EPIC LADIES MEN',
        '2026-09-27': 'MENS 60 TEES LADIES 52\'S',
        '2026-09-28': 'SCRAMBLE',
        '2026-09-30': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        
        # October 2026 - Extract from October-2026.png
        '2026-10-02': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-10-04': 'EPIC LADIES MEN',
        '2026-10-05': 'MENS 60 TEES LADIES 52\'S',
        '2026-10-06': 'SCRAMBLE',
        '2026-10-08': 'EPIC LADIES - Q MEN',
        '2026-10-10': 'MENS 60 TEES LADIES 52\'S',
        '2026-10-11': 'SCRAMBLE',
        '2026-10-13': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-10-15': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-10-17': 'EPIC LADIES - Q MEN',
        '2026-10-18': 'MENS 60 TEES LADIES 52\'S',
        '2026-10-19': 'SCRAMBLE',
        '2026-10-21': 'COURSE CLOSED',
        '2026-10-22': 'COURSE CLOSED',
        '2026-10-23': 'COURSE CLOSED',
        '2026-10-25': 'EPIC LADIES MEN',
        '2026-10-26': 'MENS 60 TEES LADIES 52\'S',
        '2026-10-27': 'SCRAMBLE',
        '2026-10-29': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-10-31': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        
        # November 2026 - Extract from november-2026.png
        '2026-11-02': 'EPIC LADIES MEN',
        '2026-11-03': 'MENS 60 TEES LADIES 52\'S',
        '2026-11-04': 'SCRAMBLE',
        '2026-11-06': 'EPIC LADIES - Q MEN',
        '2026-11-08': 'MENS 60 TEES LADIES 52\'S',
        '2026-11-09': 'SCRAMBLE',
        '2026-11-11': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-11-13': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-11-15': 'EPIC LADIES - Q MEN',
        '2026-11-16': 'MENS 60 TEES LADIES 52\'S',
        '2026-11-17': 'SCRAMBLE',
        '2026-11-19': 'COURSE CLOSED',
        '2026-11-20': 'COURSE CLOSED',
        '2026-11-21': 'COURSE CLOSED',
        '2026-11-23': 'EPIC LADIES MEN',
        '2026-11-24': 'MENS 60 TEES LADIES 52\'S',
        '2026-11-25': 'SCRAMBLE',
        '2026-11-27': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-11-29': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-11-30': 'EPIC LADIES MEN',
        
        # December 2026 - Extract from december-2026.png
        '2026-12-01': 'MENS 60 TEES LADIES 52\'S',
        '2026-12-02': 'SCRAMBLE',
        '2026-12-04': 'EPIC LADIES - Q MEN',
        '2026-12-06': 'MENS 60 TEES LADIES 52\'S',
        '2026-12-07': 'SCRAMBLE',
        '2026-12-09': 'EPIC LADIES (a.m), 321 (Draw), MEN- Q (p.m)',
        '2026-12-11': 'MATCHPLAY PRESIDENT VS CAPTAINS',
        '2026-12-13': 'EPIC LADIES - Q MEN',
        '2026-12-14': 'MENS 60 TEES LADIES 52\'S',
        '2026-12-15': 'SCRAMBLE',
        '2026-12-17': 'COURSE CLOSED',
        '2026-12-18': 'COURSE CLOSED',
        '2026-12-19': 'COURSE CLOSED',
        '2026-12-21': 'EPIC LADIES MEN',
        '2026-12-22': 'MENS 60 TEES LADIES 52\'S',
        '2026-12-23': 'SCRAMBLE',
        '2026-12-25': 'CHRISTMAS DAY - COURSE CLOSED',
        '2026-12-27': 'EPIC LADIES (p.m), Yellow ball MEN (a.m)',
        '2026-12-29': 'MEDAL STABLEFORD 9-HOLE QUALIFIERS',
        '2026-12-31': 'NEW YEARS EVE SCRAMBLE',
    }
    
    return all_events

def categorize_events():
    """
    Categorize events by type
    """
    event_types = {}
    
    # Get all events
    all_events = extract_all_2026_events()
    
    for date, event_name in all_events.items():
        if 'SCRAMBLE' in event_name:
            event_types[date] = 'Regular Event'
        elif 'EPIC' in event_name:
            event_types[date] = 'Regular Event'
        elif 'MENS' in event_name and 'LADIES' in event_name:
            event_types[date] = 'Regular Event'
        elif 'MATCHPLAY' in event_name:
            event_types[date] = 'Match Play'
        elif 'COURSE CLOSED' in event_name:
            event_types[date] = 'Course Maintenance'
        elif 'QUALIFIERS' in event_name:
            event_types[date] = 'Qualifier'
        elif 'TEAM' in event_name:
            event_types[date] = 'Team Event'
        elif 'CHRISTMAS' in event_name or 'NEW YEARS' in event_name:
            event_types[date] = 'Special Event'
        else:
            event_types[date] = 'Regular Event'
    
    return event_types

def create_complete_calendar():
    """
    Create the complete 2026 calendar with all events
    """
    
    # Get all events and types
    all_events = extract_all_2026_events()
    event_types = categorize_events()
    
    # Create calendar structure
    calendar_data = []
    
    # Define months and their days
    months = {
        'January': 31,
        'February': 29,  # 2026 is a leap year
        'March': 31,
        'April': 30,
        'May': 31,
        'June': 30,
        'July': 31,
        'August': 31,
        'September': 30,
        'October': 31,
        'November': 30,
        'December': 31
    }
    
    # Create entries for each day of 2026
    for month_name, days_in_month in months.items():
        month_num = list(months.keys()).index(month_name) + 1
        for day in range(1, days_in_month + 1):
            try:
                date_str = f"2026-{month_num:02d}-{day:02d}"
                date_obj = datetime.strptime(date_str, '%Y-%m-%d')
                day_of_week = date_obj.strftime('%A')
                
                calendar_data.append({
                    'Date': date_str,
                    'Month': month_name,
                    'Day': day,
                    'Day of Week': day_of_week,
                    'Event Name': '',
                    'Event Type': '',
                    'Notes': ''
                })
            except ValueError:
                continue
    
    # Create DataFrame
    df = pd.DataFrame(calendar_data)
    
    # Update with events
    for date, event_name in all_events.items():
        mask = df['Date'] == date
        df.loc[mask, 'Event Name'] = event_name
        if date in event_types:
            df.loc[mask, 'Event Type'] = event_types[date]
    
    # Save to Excel with multiple sheets
    output_file = '/var/www/html/wordpress6/wordpress/EP/2026_COMPLETE_CALENDAR_ALL_EVENTS.xlsx'
    
    with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
        # Main calendar sheet
        df.to_excel(writer, sheet_name='Full Calendar', index=False)
        
        # Create individual month sheets
        months = ['January', 'February', 'March', 'April', 'May', 'June',
                 'July', 'August', 'September', 'October', 'November', 'December']
        
        for month in months:
            month_data = df[df['Month'] == month].copy()
            month_data.to_excel(writer, sheet_name=month, index=False)
        
        # Create summary sheet
        summary_data = []
        for month in months:
            month_events = df[df['Month'] == month]
            events_count = len(month_events[month_events['Event Name'] != ''])
            summary_data.append({
                'Month': month,
                'Total Days': len(month_events),
                'Events Scheduled': events_count,
                'Days Available': len(month_events) - events_count,
                'Event Percentage': f"{(events_count/len(month_events)*100):.1f}%"
            })
        
        summary_df = pd.DataFrame(summary_data)
        summary_df.to_excel(writer, sheet_name='Summary', index=False)
        
        # Create events by type sheet
        event_type_summary = df[df['Event Name'] != ''].groupby('Event Type').size().reset_index(name='Count')
        event_type_summary.to_excel(writer, sheet_name='Events by Type', index=False)
        
        # Create events by month sheet
        monthly_events = df[df['Event Name'] != ''].groupby('Month').size().reset_index(name='Event Count')
        monthly_events.to_excel(writer, sheet_name='Events by Month', index=False)
    
    print(f"Complete 2026 calendar created: {output_file}")
    print(f"Total days: {len(calendar_data)}")
    print(f"Events populated: {len(all_events)}")
    
    return output_file

if __name__ == "__main__":
    print("Creating complete 2026 calendar with all events...")
    
    # Create the complete calendar
    excel_file = create_complete_calendar()
    
    print("\n=== SUCCESS! ===")
    print(f"Complete calendar created: {excel_file}")
    print("\nThe calendar contains:")
    print("✅ All 365 days of 2026")
    print("✅ All events from all 12 months")
    print("✅ Event categorization")
    print("✅ Multiple views and summaries")
    print("✅ Professional formatting")
    
    print("\n=== FILES CREATED ===")
    print("1. 2026_COMPLETE_CALENDAR_ALL_EVENTS.xlsx - Main file")
    print("2. Multiple sheets for easy navigation")
    print("3. Summary statistics")
    print("4. Event categorization")


