from typing import Optional, Union
import cups
from pathlib import Path
import logging

logger = logging.getLogger(__name__)

class RegularPrinterService:
    def __init__(self, printer_name: Optional[str] = None):
        """Initialize the regular printer service.
        
        Args:
            printer_name: Name of the printer to use. If None, will use default printer.
        """
        self.printer_name = printer_name
        self.conn = cups.Connection()
        
    async def print_file(self, file_path: Union[str, Path]) -> bool:
        """Print a PDF or PNG file to the regular printer.
        
        Args:
            file_path: Path to the PDF or PNG file
            
        Returns:
            bool: True if print was successful, False otherwise
        """
        try:
            if file_path is None:
                logger.error("No file path provided")
                return False
                
            file_path = Path(file_path)
            if not file_path.exists():
                logger.error(f"File not found: {file_path}")
                return False
                
            # Get the printer
            printer = self.printer_name or self.conn.getDefault()
            if not printer:
                logger.error("No default printer found")
                return False
                
            # Submit the print job
            job_id = self.conn.printFile(
                printer,
                str(file_path),
                f"{file_path.suffix.upper()} Print",
                {}
            )
            logger.info(f"Print job {job_id} submitted to printer {printer}")
            return True
            
        except Exception as e:
            logger.error(f"Error printing file {file_path}: {str(e)}")
            return False 