from jobs.job_base import JobBase
import cv2
import numpy as np

class JobStandardizeFormat(JobBase):
    """
    画像ファイルのフォーマットを標準化するジョブ

    - YOLOv8は内部でリサイズ/正規化
    - ここでは必要に応じて色空間変換やチャネル数の調整を行う
    - サイズ上限：表示/処理負荷を抑えるため 長辺 max=1280〜1920px に縮小(YOLO入力は内部で処理するの
    """
    def __init__(self,max_side:int=1920):
        super().__init__(name=self.__class__.__name__)
        self.description = "Standardize Image Format Job"
        self.max_side = max_side

    def _cap_max_side(self, img: np.ndarray) -> tuple[np.ndarray, float]:
        h, w = img.shape[:2]
        self. logger.debug(f"Original image size: {w}x{h}")
        side = max(h, w)
        if self.max_side and side > self.max_side:
            scale = self.max_side / side
            img = cv2.resize(img, (int(w*scale), int(h*scale)), interpolation=cv2.INTER_AREA)
            return img, float(scale)
        return img, 1.0

    def execute(self):        
        self.logger.info(f"{self.name} execute started")
        # オリジナル画像から検証用の画像を取得
        img, scale = self._cap_max_side(self.status.original_image)
        self.status.processed_image = img
        self.status.processed_scale = scale
        self.logger.info(f"Image resized with scale {scale:.3f}")
        # Yoloが実行するので基本的には何もしない
        self.logger.warning(f"Yolo8 {img.shape} , auto resize/normalize internally")


