#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
v1.7.1

Main file of Inky-Calendar software. Creates dynamic images for each section,
assembles them and sends it to the E-Paper

Copyright by aceisace
"""
from __future__ import print_function
import arrow
from time import sleep
import gc
import inkycal_rss as rss
import inkycal_weather as weather
import inkycal_calendar as calendar
import inkycal_agenda as agenda

from configuration import *
import importlib
driver = importlib.import_module('drivers.'+model)

"""Remove previously generated images"""
image_cleanup()

"""Check time and calibrate display if time """
while True:
  now = arrow.now(tz=get_tz())
  for _ in range(1):
    image = Image.new('RGB', (display_width, display_height), background_colour)

    """------------------Add short info------------------"""
    print('Current Date: {0} \nCurrent Time: {1}'.format(now.format(
      'D MMM YYYY'), now.format('HH:mm')))
    print('-----------Main programm started now----------')

    """----------------Generating and assembling images------"""
    if top_section == 'Weather':
      try:
        weather.main()
        weather_image = Image.open(image_path + 'weather.png')
        image.paste(weather_image, (0, 0))
      except:
        pass

    if middle_section == 'Calendar':
      try:
        calendar.main()
        calendar_image = Image.open(image_path + 'calendar.png')
        image.paste(calendar_image, (0, middle_section_offset))
      except:
        pass

    if middle_section == 'Agenda':
      try:
        agenda.main()
        agenda_image = Image.open(image_path + 'agenda.png')
        image.paste(agenda_image, (0, middle_section_offset))
      except:
        pass

    if bottom_section == 'RSS':
      try:
        rss.main()
        rss_image = Image.open(image_path + 'rss.png')
        image.paste(rss_image, (0, bottom_section_offset))
      except:
        pass

    image.save(image_path + 'canvas.png')

    """---------Refreshing E-Paper with newly created image-----------"""
    epaper = driver.EPD()
    print('Initialising E-Paper...', end = '')
    epaper.init()
    print('Done')

    if three_colour_support == True:
      print('Sending image data and refreshing display...', end='')
      black_im, red_im = split_colours(image)
      epaper.display(epaper.getbuffer(black_im), epaper.getbuffer(red_im))
      print('Done')
    else:
      print('Sending image data and refreshing display...', end='')
      epaper.display(epaper.getbuffer(image.convert('1', dither=True)))
      print('Done')

    print('Sending E-Paper to deep sleep...', end = '')
    epaper.sleep()
    print('Done')

    """--------------Post processing after main loop-----------------"""
    """Collect some garbage to free up some resources"""
    gc.collect()

    """Calculate duration until next display refresh"""
    for _ in range(1):
      update_timings = [(60 - int(update_interval)*updates) for updates in
        range(60//int(update_interval))][::-1]

      for _ in update_timings:
        if now.minute <= _:
          minutes = _ - now.minute
          break

      refresh_countdown = minutes*60 + (60 - now.second)
      print('{0} Minutes left until next refresh'.format(minutes))

      del update_timings, minutes, image
      sleep(refresh_countdown)