School Time Table Generator
Complete schedule maker for Government Highschool

Created for: Piyush (Senior Clerk)
Date: 2025

"""

import pandas as pd
from datetime import datetime, timedelta

# ─── SCHOOL HOURS ───────────────────────────────────────────────────────────────
START_TIME = "10:00 AM"
END_TIME = "5:00 PM"
TOTAL_HOURS = 7  # Including breaks

# ─── DEFAULT PERIODS ────────────────────────────────────────────────────────────
DEFAULT_PERIODS = [
    "10:00 AM - 11:00 AM  → Period 1",
    "11:00 AM - 11:30 AM  → Tea Break",
    "11:30 AM - 12:30 PM  → Period 2",
    "12:30 PM - 1:00 PM   → Period 3",
    "1:00 PM - 1:30 PM    → Lunch Break",
    "1:30 PM - 2:30 PM    → Period 4",
    "2:30 PM - 3:30 PM    → Period 5",
    "3:30 PM - 4:00 PM    → Games/Activity",
    "4:00 PM - 5:00 PM    → Period 6 / Closing"
]

# ─── FUNCTIONS ──────────────────────────────────────────────────────────────────

def create_daily_schedule(date_str=None):
    """Create daily schedule for given date"""
    if date_str is None:
        date_str = datetime.now().strftime("%d-%m-%Y")
    
    schedule = []
    periods = [
        ("10:00 AM - 11:00 AM", "Period 1", "Regular Class"),
        ("11:00 AM - 11:30 AM", "Tea Break", "Students break"),
        ("11:30 AM - 12:30 PM", "Period 2", "Regular Class"),
        ("12:30 PM - 1:00 PM", "Period 3", "Regular Class"),
        ("1:00 PM - 1:30 PM", "Lunch Break", "Students break"),
        ("1:30 PM - 2:30 PM", "Period 4", "Regular Class"),
        ("2:30 PM - 3:30 PM", "Period 5", "Regular Class"),
        ("3:30 PM - 4:00 PM", "Games/Activity", "Sports/Activities"),
        ("4:00 PM - 5:00 PM", "Period 6 / Closing", "Final class/Assembly")
    ]
    
    for time, activity, details in periods:
        schedule.append({
            'Date': date_str,
            'Time': time,
            'Activity': activity,
            'Details': details,
            'Status': 'Scheduled'
        })
    
    return pd.DataFrame(schedule)

def create_weekly_timetable(start_date=None):
    """Create complete weekly timetable"""
    if start_date is None:
        start_date = datetime.now()
    
    days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
    all_schedules = []
    
    for i, day in enumerate(days):
        current_date = start_date + timedelta(days=i)
        date_str = current_date.strftime("%d-%m-%Y")
        
        day_schedule = create_daily_schedule(date_str)
        day_schedule['Day'] = day
        all_schedules.append(day_schedule)
    
    return pd.concat(all_schedules, ignore_index=True)

def create_classwise_timetable():
    """Create timetable for different classes"""
    classes = ['9A', '9B', '10A', '10B', '11A', '11B', '12A', '12B']
    
    timetable = []
    for class_name in classes:
        timetable.append({
            'Class': class_name,
            'Monday': 'Period 1-6 as per schedule',
            'Tuesday': 'Period 1-6 as per schedule',
            'Wednesday': 'Period 1-6 as per schedule',
            'Thursday': 'Period 1-6 as per schedule',
            'Friday': 'Period 1-6 as per schedule',
            'Saturday': 'Half day/Activity'
        })
    
    return pd.DataFrame(timetable)

def create_teacher_timetable():
    """Create teacher assignment schedule"""
    teachers = [
        ('શ્રી શાહ', 'Gujarati', ['9A', '9B', '10A']),
        ('શ્રી પટેલ', 'Maths', ['10A', '10B', '11A']),
        ('શ્રીમતી દેસाई', 'Science', ['9A', '9B', '10A', '10B']),
        ('શ્રી શર્મા', 'Social Science', ['11A', '11B', '12A']),
        ('શ્રીમતી ચoudhary', 'English', ['9A', '10A', '11A']),
    ]
    
    teacher_schedule = []
    for teacher, subject, classes in teachers:
        for class_name in classes:
            teacher_schedule.append({
                'Teacher': teacher,
                'Subject': subject,
                'Class': class_name,
                'Periods_Per_Week': 6,
                'Schedule': 'As per daily timetable'
            })
    
    return pd.DataFrame(teacher_schedule)

# ─── EXPORT TO EXCEL ─────────────────────────────────────────────────────────────

def export_all_timetables():
    """Export all timetables to single Excel file"""
    filepath = "/home/piyush/School_Time_Table.xlsx"
    
    with pd.ExcelWriter(filepath, engine='openpyxl') as writer:
        # Sheet 1: Daily Schedule (Today)
        daily_schedule = create_daily_schedule()
        daily_schedule.to_excel(writer, sheet_name='Today_Schedule', index=False)
        
        # Sheet 2: Weekly Timetable
        weekly = create_weekly_timetable()
        weekly.to_excel(writer, sheet_name='Weekly_Plan', index=False)
        
        # Sheet 3: Class-wise Schedule
        class_wise = create_classwise_timetable()
        class_wise.to_excel(writer, sheet_name='Classwise', index=False)
        
        # Sheet 4: Teacher Assignment
        teacher_sched = create_teacher_timetable()
        teacher_sched.to_excel(writer, sheet_name='Teachers', index=False)
        
        # Sheet 5: Activities Calendar
        activities = pd.DataFrame({
            'Month': ['January', 'February', 'March', 'April', 'May', 'June',
                     'July', 'August', 'September', 'October', 'November', 'December'],
            'Major_Activities': [
                ' Admissions Begin, Republic Day',
                'Annual Day Preparation',
                'Final Exams, Results',
                'New Session Start',
                'Staff Meeting',
                'Summer Vacation',
                'Reopening, Independence Day',
                'Teachers Day, Mid-term',
                'Half-yearly Exams',
                'Sports Day',
                'Pre-boards',
                'Winter Vacation'
            ]
        })
        activities.to_excel(writer, sheet_name='Activities', index=False)
    
    print("✓ School timetable saved at:", filepath)
    print("✓ Sheets created: Today_Schedule, Weekly_Plan, Classwise, Teachers, Activities")
    return filepath

if __name__ == "__main__":
    print("="*60)
    print("SCHOOL TIME TABLE GENERATOR")
    print("="*60)
    
    filepath = export_all_timetables()
    print(f"\n✓ File created: {filepath}")
    print("\nYou can open this Excel file and:")
    print("  1. Edit timings as per your school")
    print("  2. Add teacher names/subjects")
    print("  3. Print and paste in staff room")
    print("  4. Update monthly activities")
