import cairosvg
from PyPDF2 import PdfMerger
import os
import tempfile
import shutil

def page2pdfgenerator(pdfArr, output_pdf):
    # Ensure output directory exists
    output_dir = os.path.dirname(output_pdf)
    if output_dir and not os.path.exists(output_dir):
        os.makedirs(output_dir, exist_ok=True)
    
    # Remove existing output file if it exists
    if os.path.exists(output_pdf):
        try:
            os.remove(output_pdf)
        except OSError as e:
            print(f"Warning: Could not remove existing output file: {e}")
    
   
    # Get the directory of the current script to find the hardcoded PDF
    script_dir = os.path.dirname(os.path.abspath(__file__))
    front_page_pdf = os.path.join(script_dir, "Mobile_Land_Survey_front_Page.pdf")
    
    # Validate that all required PDF files exist
    required_pdfs = [front_page_pdf, *pdfArr]
    for pdf_file in required_pdfs:
        if not os.path.exists(pdf_file):
            raise FileNotFoundError(f"Required PDF file not found: {pdf_file}")
    
    # Temporary list to store generated PDFs
    pdf_files = [front_page_pdf, *pdfArr]
    
    try:               
        # Merge PDFs
        merger = PdfMerger()
        
        for pdf_file in pdf_files:
            if os.path.exists(pdf_file):
                try:
                    merger.append(pdf_file)
                    # print(f"Added PDF to merger: {pdf_file}")
                except Exception as e:
                    print(f"Error adding PDF to merger: {e}")
                    raise
            else:
                print(f"Warning: PDF file not found: {pdf_file}")
        
        merger.write(output_pdf)
        merger.close()
        
        print(f"Successfully generated: {output_pdf}")
        
    except Exception as e:
        print(f"Error generating PDF: {e}")
        # Clean up any partial output
        if os.path.exists(output_pdf):
            try:
                os.remove(output_pdf)
            except OSError:
                pass
        raise
