import svgwrite
import base64
import math
from page2pdfgenerator import page2pdfgenerator
from sat_on_pdf.main import generatepdfpage1,generatepdfpage2,generatepdftable

import os
from dotenv import load_dotenv
load_dotenv()
pdfTemp = os.getenv("PDF_TEMP")
logoIcon = os.getenv("LOGO_ICON")
S3SatDir = os.getenv("S3_SAT_PDF_DIR")

AWS_ACCESS_KEY = os.getenv("AWS_ACCESS_KEY")
AWS_SECRET_KEY = os.getenv("AWS_SECRET_KEY")
S3_REGION      = os.getenv("S3_REGION")
BUCKET_NAME    = os.getenv("BUCKET_NAME")

import boto3
from botocore.exceptions import NoCredentialsError

def OutputFileToS3(LocalFileName):
    file_name = os.path.basename(LocalFileName)
    s3_key = f"fmb_refixing/{S3SatDir}{file_name}" if S3SatDir else file_name

    # Create S3 client
    s3 = boto3.client(
        's3',
        aws_access_key_id=AWS_ACCESS_KEY,
        aws_secret_access_key=AWS_SECRET_KEY,
        region_name=S3_REGION
    )

    try:
        s3.upload_file(LocalFileName, BUCKET_NAME, s3_key, ExtraArgs={'ContentType': 'application/pdf'})
        s3_url = f"https://{BUCKET_NAME}.s3.{S3_REGION}.amazonaws.com/{s3_key}"
        return s3_url
    except FileNotFoundError:
        print(f"The file {LocalFileName} was not found.")
        return None
    except NoCredentialsError:
        print("Credentials not available for AWS S3.")
        return None
    except Exception as e:
        print(f"Error uploading file to S3: {e}")
        return None



def img_to_base64(image_path):
    with open(image_path, "rb") as img_file:
        return base64.b64encode(img_file.read()).decode("utf-8")

def generatepdf(data,id):
    page1pdf = pdfTemp+id+"_1.pdf"
    page2pdf = pdfTemp+id+"_2.pdf"
    outputpdf = pdfTemp+id+".pdf"
    scaleandarea = generatepdfpage1(data,page1pdf)
    generatepdfpage2(data,scaleandarea,page2pdf)

    dupepoints_chunks = [data["duppoints"][i:i+26] for i in range(0, len(data["duppoints"]), 26)]

    pdfArr = [page1pdf,page2pdf]
    for index,i in enumerate(dupepoints_chunks):
        data["duppoints"] = i
        file_name = pdfTemp+id+"_table_"+str(index)+".pdf"
        generatepdftable(data,scaleandarea,file_name)
        pdfArr.append(file_name)

    page2pdfgenerator(pdfArr,outputpdf)

    S3Url = OutputFileToS3(outputpdf)

    for i in pdfArr:
        os.remove(i)
    os.remove(outputpdf)

    return S3Url