#!/usr/bin/env python3
"""
Time utilities for solar monitoring
Handles IST timezone and solar hours (6 AM to 6:30 PM IST)
"""

import pytz
from datetime import datetime, time

def get_ist_time():
    """Get current time in IST"""
    ist = pytz.timezone('Asia/Kolkata')
    return datetime.now(ist)

def is_solar_hours():
    """Check if current time is within solar hours (6 AM to 6:30 PM IST)"""
    ist_time = get_ist_time()
    current_time = ist_time.time()
    
    # Solar hours: 6:00 AM to 6:30 PM IST
    start_time = time(6, 0)   # 6:00 AM
    end_time = time(18, 30)   # 6:30 PM
    
    return start_time <= current_time <= end_time

def get_solar_hours_status():
    """Get detailed solar hours status"""
    ist_time = get_ist_time()
    current_time = ist_time.time()
    
    start_time = time(6, 0)
    end_time = time(18, 30)
    
    if current_time < start_time:
        return {
            'active': False,
            'status': 'before_solar_hours',
            'message': f'Solar hours start at {start_time.strftime("%I:%M %p")} IST',
            'next_start': f'{start_time.strftime("%I:%M %p")} IST'
        }
    elif current_time > end_time:
        return {
            'active': False,
            'status': 'after_solar_hours',
            'message': f'Solar hours ended at {end_time.strftime("%I:%M %p")} IST',
            'next_start': f'Tomorrow at {start_time.strftime("%I:%M %p")} IST'
        }
    else:
        return {
            'active': True,
            'status': 'during_solar_hours',
            'message': f'Currently during solar hours ({start_time.strftime("%I:%M %p")} - {end_time.strftime("%I:%M %p")} IST)',
            'time_remaining': f'Ends at {end_time.strftime("%I:%M %p")} IST'
        }

def format_ist_time(dt=None):
    """Format datetime in IST"""
    if dt is None:
        dt = get_ist_time()
    return dt.strftime('%Y-%m-%d %I:%M:%S %p IST')

def get_time_until_solar_start():
    """Get time until solar hours start"""
    ist_time = get_ist_time()
    current_time = ist_time.time()
    start_time = time(6, 0)
    
    if current_time >= start_time:
        return None  # Already started
    
    # Calculate time until start
    tomorrow = ist_time.replace(hour=start_time.hour, minute=start_time.minute, second=0, microsecond=0)
    if current_time >= start_time:
        tomorrow = tomorrow.replace(day=tomorrow.day + 1)
    
    return tomorrow - ist_time 