'''
  ____ _____ ____ 
 |  _ \_   _/ ___|
 | |_) || || |    
 |  _ < | || |___ 
 |_| \_\|_| \____|
                  
Script to read time from RTC module
I2C connection
Address 0x68
/usr/bin/python3 /var/www/nebuleair_pro_4g/RTC/read.py
'''
import smbus2
import time
import json
from datetime import datetime

# DS3231 I2C address
DS3231_ADDR = 0x68

# Registers for DS3231
REG_TIME = 0x00

def bcd_to_dec(bcd):
    return (bcd // 16 * 10) + (bcd % 16)

def read_time(bus):
    """Try to read and decode time from the RTC module (DS3231)."""
    try:
        data = bus.read_i2c_block_data(DS3231_ADDR, REG_TIME, 7)
        seconds = bcd_to_dec(data[0] & 0x7F)
        minutes = bcd_to_dec(data[1])
        hours = bcd_to_dec(data[2] & 0x3F)
        day = bcd_to_dec(data[4])
        month = bcd_to_dec(data[5])
        year = bcd_to_dec(data[6]) + 2000
        return datetime(year, month, day, hours, minutes, seconds)
    except OSError:
        return None  # RTC module not connected

def main():
    # Read RTC time
    bus = smbus2.SMBus(1)
    # Try to read RTC time
    rtc_time = read_time(bus)
    
    # Get current system time
    system_time = datetime.now() #local
    utc_time = datetime.utcnow() #UTC

    # If RTC is not connected, set default message
    # Calculate time difference (in seconds) if RTC is connected
    if rtc_time:
        rtc_time_str = rtc_time.strftime('%Y-%m-%d %H:%M:%S')
        time_difference = int((utc_time - rtc_time).total_seconds())  # Convert to int
    else:
        rtc_time_str = "not connected"
        time_difference = "N/A"  # Not applicable

    # Print both times
    #print(f"RTC module Time:    {rtc_time.strftime('%Y-%m-%d %H:%M:%S')}")
    #print(f"Sys local Time:     {system_time.strftime('%Y-%m-%d %H:%M:%S')}")
    #print(f"Sys UTC Time:       {utc_time.strftime('%Y-%m-%d %H:%M:%S')}")

     # Create JSON output
    time_data = {
        "rtc_module_time":rtc_time_str,
        "system_local_time": system_time.strftime('%Y-%m-%d %H:%M:%S'),
        "system_utc_time": utc_time.strftime('%Y-%m-%d %H:%M:%S'),
        "time_difference_seconds": time_difference
    }

    print(json.dumps(time_data, indent=4))


if __name__ == "__main__":
    main()