#!/usr/bin/env python3
# -*- coding: utf-8 -*-



import os
import requests
import json
import traceback
from datetime import datetime
from datetime import timedelta
from pyproj import Proj
import mysql.connector
from mysql.connector import Error
from mysql.connector import errorcode
import xml.etree.ElementTree as ET

import requests
import shutil
from PIL import Image


hilabeteak=['','Urtarrilak','Otsailak','Martxoak','Apirilak','Maiatzak','Ekainak','Uztailak','Abuztuak', 'Irailak','Urriak','Azaroak','Abenduak']
kultuklik="https://www.kulturklik.euskadi.eus"
storage="../dat"
kulturklik_download="https://opendata.euskadi.eus/contenidos/ds_eventos/agenda_cultura_euskadi/eu_kultura/adjuntos/kulturklik.xml"
tname="/tmp/kulturklik.xml"

try:
    non=os.path.abspath(os.path.dirname(os.sys.argv[0]))
    os.chdir(non)

    if not os.path.exists('../dat'):
        os.makedirs('./dat')

    with open(tname, "wb") as file:
        response = requests.get(kulturklik_download)
        file.write(response.content)
    print("finish download. tname: %s stat: %s" %(tname,str(os.stat(tname)) ))

    if os.path.isfile(tname) and os.path.getsize(tname) > 0:
        tree1 = ET.parse(tname)
        root = tree1.getroot()
        shutil.move(tname,'../dat/kulturklik.xml' )

    
except Exception as e:
    print("xml deskarga errorea. " + str(e))
    print(traceback.print_exc())
    os.sys.exit()


recordDB=[]
try:
    tree = ET.parse('../dat/kulturklik.xml')
    root = tree.getroot()
    

    for row in root.iter('row'):
        
        d={
            "id":None,
            "titulu":None,
            "mota":None,
            "egun":None,
            "noiz":None,
            "ordu":None,
            "non":None,
            "laburpen":None,
            "irudi":None,
            "created_at":None,
            "updated_at":None
            }
        
        #tc=row.find('territorycode')
        #if type(tc) != ET.Element or tc.text != "20":
        #    continue
    
        esd=row.find('eventStartDate')
        eed=row.find('eventEndDate')
        if type(esd) != ET.Element or type(eed) != ET.Element :
            continue

        n1=datetime.strptime( esd.text, "%d/%m/%Y" )
        n2=datetime.strptime( eed.text, "%d/%m/%Y" )
        now=datetime.now()

        diferencia = n1 - now

        #print( "***** start:"+ str(n1)+ " ---> " + str(n2) )
        #print("PASATA?????????????? ", diferencia )

        numero_de_dias = diferencia.days

        if now >= n1:
            #pasata dago
            #print("PASATA dagooooo: ")
            #print("gggg11111::: ", str(n1))
            continue

        if now + timedelta(days=7) < n1:
            #print( "7 egun baino beranduago hasten da start:"+ str(n1)+ " ---> " + str(n2) )
            #print("gggg22222::: ", str(row))
            continue


        if n1 == n2:
            d['noiz']="%d(e)ko %s %d" % ( n1.year, hilabeteak[n1.month], n1.day ) 
        else:
            d['noiz']="%s %s(e)tik %s %d(e)ra" % ( hilabeteak[n1.month], n1.day, hilabeteak[n2.month], n2.day  )
        d['egun']=n1.strftime("%Y-%m-%d")




        d['created_at']=now.strftime("%Y-%m-%d %H:%M:%S")
        d['updated_at']=now.strftime("%Y-%m-%d %H:%M:%S")

        dn = row.find('documentName')
        if type(dn) == ET.Element :
             d['titulu']=dn.text
        et=row.find('eventType')
        if type(et) == ET.Element :
            d['mota']=et.text
        ett=row.find('eventTimeTable') 
        if type(ett) == ET.Element:
            d['ordu']=ett.text
        ew=row.find('eventWhere')
        if type(ew) == ET.Element:
            d['non']=ew.text
        else:
            d['non']=""
        ad=row.find('address')
        if type(ad) == ET.Element:
            d['non'] += " - " + ad.text
        mu=row.find('municipality')
        if type(mu) == ET.Element:
            d['non'] += " - " + mu.text

        eiu=row.find('eventImageUrl')
        if type(eiu) != ET.Element:
            continue

        d['id']=eiu.text.split('/')[3]
        
        filename, file_extension = os.path.splitext(os.path.basename(eiu.text))
        iname=storage + "/" + d['id'] + file_extension
        d['irudi']="./dat/" + d['id'] + file_extension
        
        response = requests.head( kultuklik + eiu.text)

        if not os.path.isfile(iname) or 'Content-Length' not in response.headers or os.path.getsize(iname) != int(response.headers['Content-Length']):
            r = requests.get( kultuklik + eiu.text, stream=True)
            if r.status_code == 200:
                with open(iname, 'wb') as f:
                    r.raw.decode_content = True
                    shutil.copyfileobj(r.raw, f)
                    
                if file_extension != '.jpg':
                    img = Image.open(iname)
                    img.save( storage + "/" + d['id']+".jpg" )
                    shutil.rmtree(iname)
                          
        recordDB.append({
            "id":d['id'],
            "argazkia": d['irudi'],
            "eginkizuna":d['mota'],        
            "titulua":d['titulu'],
            "lekua": d['non'],
            "eguna": d['noiz'],
            "ordua":d['ordu']
        })

    #print(json.dumps(recordDB, indent=4) )
    with open('../dat/agenda.json', 'w', encoding='utf-8') as f:
        json.dump(recordDB, f, ensure_ascii=False, indent=4)
      

except Exception as e:
        print("Gorabehera izen errorea. " + str(e))
        print(traceback.print_exc())




