"""
capture
Picamera2 を使用してカメラ画像を取得するモジュール
"""

import numpy as np
from picamera2 import Picamera2

from common import config


class CameraCapture:
    """Picamera2 でフレームを取得するクラス"""

    def __init__(self) -> None:
        self._camera: Picamera2 | None = None

    def start(self) -> None:
        """カメラを初期化して撮影を開始する"""
        self._camera = Picamera2()
        camera_config = self._camera.create_preview_configuration(
            main={
                "size": (config.FRAME_WIDTH, config.FRAME_HEIGHT),
                "format": "BGR888",
            },
        )
        self._camera.configure(camera_config)
        self._camera.start()

    def capture(self) -> np.ndarray:
        """1フレームを取得する

        Returns:
            BGR 形式の画像（NumPy 配列）
        """
        return self._camera.capture_array()

    def stop(self) -> None:
        """カメラを停止する"""
        if self._camera is not None:
            self._camera.stop()
            self._camera.close()
            self._camera = None
