# -*- coding: utf-8 -*-
import calendar
import scribus
import datetime
from collections import namedtuple



month_num = 0
week_counter = 0
x_start_pos = 15
x_pos = x_start_pos
y_start_pos = 15
y_pos = y_start_pos
kw_y_spacing=10
kw_height=8
day_label_number_spacing=5
x_off=25



# user properties
day_names = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
month_names = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']

year=2022
# celebration days month, day, label
celebDays = {
  0: "01.01. Neujahr",
  3: "15.04. Karfreitag · 18.04. Ostermontag",
  4: "01.05 Tag der Arbeit · 26.05. Christi Himmelfahrt",
  5: "06.06. Pfingstmontag",
  9: "03.10. Tag der Deutschen Einheit",
  11: "25.12. 1. Weihnachtsfeiertag · 26.12. 2. Weihnachtsfeiertag"
}

celebDaysLabels = {
  0: [1],
  3: [15,18],
  4: [1,26],
  5: [6],
  9: [3],
  11: [25,26]
}



kw_font_size=24
font_size=32
month_font_size=36
celeb_font_size=24

#colors
headerColor='White'
kwColor='White'
baseColor='White'
sundayColor='Blue'
celebColor='Blue'

headerFont='Century Gothic Bold'
baseFont='Century Gothic Regular'




months = calendar.Calendar(calendar.SUNDAY).yeardays2calendar(year, 1)
last_day=31
while month_num <= 11:
  #this is the last monday of current_month
  #last_day=months[month_num][-1][-1][0][0]
  #[0][0]
  
  for weeks in months[month_num]:
    # month label
    frame_name = scribus.createText(x_pos, y_pos, 100, 9)
    scribus.setText(month_names[month_num], frame_name)
    scribus.setTextColor(headerColor, frame_name)
    scribus.setFont(headerFont, frame_name)
    scribus.setFontSize(month_font_size, frame_name)
    #space for kw
    y_pos = y_pos+9
    counter=1
    for week in weeks:
     count=counter+1 
     week_counter = week_counter + 1
     for day in week:
       #draw a line b4 day
       d = scribus.createLine(x_pos,y_pos+kw_height,x_pos,y_pos+kw_height+kw_y_spacing+6)
       #scribus.setLineWidth(a, d)
       scribus.setLineColor(baseColor, d)
       scribus.setFillColor(baseColor, d)
       if day[0] != 0:
         #day label
         frame_name1 = scribus.createText(x_pos, y_pos+kw_height, 25, 6)
         scribus.setText(day_names[day[1]], frame_name1)
         # day number
         frame_name2 = scribus.createText(x_pos, y_pos +kw_height+ kw_y_spacing, 25, 6)
         scribus.setText(str(day[0]), frame_name2)
         scribus.setTextColor(baseColor, frame_name1)
         scribus.setTextColor(baseColor, frame_name2)
         # sunday set to blue
         if day[1] == 6:
           scribus.setTextColor(sundayColor, frame_name1)
           scribus.setTextColor(sundayColor, frame_name2)
         if day[1] == 0:
           # new kw
           frame_name = scribus.createText(x_pos, y_pos, 25, kw_height)
           scribus.setText(str(datetime.date(year, month_num+1, day[0]).isocalendar()[1]), frame_name)
           scribus.setTextColor(kwColor, frame_name)
           scribus.setFontSize(kw_font_size, frame_name)
           scribus.setTextAlignment(scribus.ALIGN_CENTERED,frame_name)
         x_pos = x_pos + x_off
         scribus.setFontSize(font_size, frame_name1)
         scribus.setFont(baseFont, frame_name1)
         scribus.setTextAlignment(scribus.ALIGN_CENTERED,frame_name1)
         scribus.setFontSize(font_size, frame_name2)
         scribus.setFont(baseFont, frame_name2)
         scribus.setTextAlignment(scribus.ALIGN_CENTERED,frame_name2)
         last_day=day[0]
         if month_num in celebDaysLabels:
           if day[0] in celebDaysLabels[month_num]:
             scribus.setTextColor(celebColor, frame_name2)
  #draw a line after last day
  e = scribus.createLine(x_pos,y_pos+kw_height,x_pos,y_pos+kw_height+kw_y_spacing+6)
  #scribus.setLineWidth(a, d)
  scribus.setLineColor(baseColor, e)
  scribus.setFillColor(baseColor, e)
  # celeb day text
  if month_num in celebDays:
    frame_name3 = scribus.createText(x_pos-x_off*last_day/2.0-200, y_pos-9*counter, 400, 9)
    scribus.setText(celebDays[month_num], frame_name3)
    scribus.setTextColor(baseColor, frame_name3)
    scribus.setFont(baseFont, frame_name3)
    scribus.setFontSize(celeb_font_size, frame_name3)
    scribus.setTextAlignment(scribus.ALIGN_CENTERED,frame_name3)
  # write year to right hand site for frame look
  frame_name4 = scribus.createText(x_pos-100, y_pos-9*counter, 100, 9)
  scribus.setText(str(year), frame_name4)
  scribus.setTextColor(headerColor, frame_name4)
  scribus.setFont(headerFont, frame_name4)
  scribus.setFontSize(month_font_size, frame_name4)
  scribus.setTextAlignment(scribus.ALIGN_RIGHT,frame_name4)
  # new month
  month_num = month_num + 1
  x_pos = x_start_pos
  y_pos = y_start_pos + (2*month_num*kw_y_spacing+month_num*9)
