import os
import subprocess
import logging
logger = logging.getLogger(__name__)
import configuration
config = configuration.parsed["DOWNLOADS"]

shrink_sizes = []

def shrink_pdf(article):
    initial_size = os.path.getsize(article.save_path + article.file_name)
    if article.file_name[-4:] != ".pdf":
        return article # it probably was a youtube video
        
    c = subprocess.run(
        ["gs", "-sDEVICE=pdfwrite", "-dPDFSETTINGS=/screen", "-dNOPAUSE", "-dBATCH", f"-sOutputFile={config['default_download_path']}/compressed.pdf", f'"{article.save_path + article.file_name}"'],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE
    )
    if c.returncode == 0:
        m = subprocess.run(
            ["mv", "-f", f"{config['default_download_path']}/compressed.pdf", article.save_path + article.file_name]
        )
        if m.returncode == 0:
            final_size = os.path.getsize(article.save_path + article.file_name)
            shrink_sizes.append(initial_size - final_size)
            logger.info(f"Compression worked. Avg shrinkage: {sum(shrink_sizes)/len(shrink_sizes) / 1000} (kb)")
            return article # even though no modifications were made
        else:
            logger.error(f"Compression ran but I could not copy back the file {m.stderr.decode()} - {m.stdout.decode()}")


    else:
        logger.error(f"Could not run the compression! {c.stderr.decode()} - {c.stdout.decode()}")
    
    return article