import psycopg2
import base64
import glob
import boto3
import os
from multiprocessing.pool import ThreadPool
from botocore.errorfactory import ClientError

# Ruta del bucket en S3
S3_BUCKET_NAME = 'gescom-apps-fotos-elor-prd'
parent_dir = "/home/python-proyect/mydata"
# Ruta de las fotos local
DATA_FILES_LOCATION = '/home/python-proyect/mydata/**/*.png'

s3 = boto3.client('s3', aws_access_key_id="AKIAU5BDP52YURNYRGF4", aws_secret_access_key="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")
def upload_to_s3(myfile):
    s3_pfactura = f"{os.path.basename(myfile)}".split("_")
    s3_uunn = s3_pfactura[1]
    s3_file = f"lecturas/{s3_pfactura[0]}/{s3_uunn}/{os.path.basename(myfile)}"
    s3.upload_file(myfile, S3_BUCKET_NAME, s3_file)
    print("Foto: '%s' " % myfile)
    try:
        s3.head_object(Bucket=S3_BUCKET_NAME, Key=s3_file)
        os.unlink(myfile)
    except ClientError:
        # Not found
        pass

connection = psycopg2.connect(dbname='lecturas_iscom', user='gdeveloper', password='V103LTAFOx', host='analytics-elor.ciunlld8zamg.us-west-2.rds.amazonaws.com', port=5432)
# Bulk query desde Base de datos
with connection.cursor(name='custom_cursor') as cursor:
    cursor.itersize = 100  # chunk size
    query = "select pfactura, suministro,tag, glomas_unidadnegocio_id, foto from history.comlec_ordenlecturas_fotos cof where cof.pfactura = '202106';"
    cursor.execute(query)
    for row in cursor:
        periodo_factura = row[0]
        # Convertir base64 en imagen png
        NOMBRE_IMAGEN = str(periodo_factura)+'_'+str(row[3])+'_'+str(row[1])+'_'+row[2]+'.png'
        path = os.path.join(parent_dir, periodo_factura)
        try:
            os.makedirs(path, exist_ok = True)
        except OSError as error:
            print("Directory '%s' can not be created" % path)
        
        with open("/home/python-proyect/mydata/"+periodo_factura+"/"+NOMBRE_IMAGEN, "wb") as fh:
            try:
                fotob64decode = base64.b64decode(row[4])
                fh.write(fotob64decode)
            except Exception:
                with open('suministro_imagen_error.txt', 'a', encoding='utf-8') as f:
                    f.write("/home/python-proyect/mydata/"+periodo_factura+"/"+NOMBRE_IMAGEN+"\n")
                pass            
        print("Iniciando copiado al S3:")
        upload_to_s3("/home/python-proyect/mydata/"+periodo_factura+"/"+NOMBRE_IMAGEN)
        print("Finalizado el copiado al S3")

