========================================================================
リファクタリング計画 (Refactoring Plan)
========================================================================

0. 方針 (Policy)
------------------------------------------------------------------------
・処理の変更は一切行わない．構造の整理のみを目的とする．
・各フェーズ完了後に必ずテストを実施し，動作が変わっていないことを確認してから次へ進む．
・テストの具体的な手順は `TEST_01_テスト仕様.txt` を参照する．


1. 現状の問題点 (Current Issues)
------------------------------------------------------------------------
`CameraBase.cs` に以下の責務が集中している．

    ・カメラ制御の抽象定義（Connect/Disconnect/Shot）
    ・チャート検出（ArUco マーカー検出，ホモグラフィ計算，マスク生成）
    ・色補正処理（TCC行列計算，多項式拡張，画像変換）
    ・ファイル I/O（CSV読み書き，保存フォルダ生成，撮影情報出力）
    ・サウンド再生


2. 目標とするディレクトリ構成 (Target Structure)
------------------------------------------------------------------------

    TIASshot/
    ├── Cameras/            ← カメラ制御（CameraBase, IScam, Lucam）
    ├── ChartDetection/     ← チャート検出（CameraBaseから分離）
    ├── ColorCorrection/    ← 色補正・TCC計算（CameraBaseから分離）
    ├── UI/                 ← フォーム（Form1, PreviewMonitor）
    ├── Config.cs           ← 設定ファイル読み込み（変更なし）
    ├── LightSource.cs      ← 光源制御（変更なし）
    └── Program.cs          ← エントリポイント（変更なし）


3. フェーズ構成 (Phases)
------------------------------------------------------------------------

3-1. フェーズ1: フォルダ整理とファイル移動

    ■ 作業内容
    ・以下のフォルダを作成し，既存ファイルを移動する．
        - `Cameras/`  ← CameraBase.cs, IScam.cs, Lucam.cs
        - `UI/`       ← Form1.cs, Form1.Designer.cs, Form1.resx,
                         PreviewMonitor.cs, PreviewMonitor.Designer.cs, PreviewMonitor.resx
    ・名前空間（namespace）はそのまま `TIASshot` で統一する．
    ・ファイルの中身は変更しない．

    ■ テスト
    ・ビルドが成功することを確認する．
    ・アプリが起動し，カメラが接続されることを確認する（手動）．

3-2. フェーズ2: 色補正処理の分離

    ■ 作業内容
    ・`ColorCorrection/` フォルダを作成する．
    ・CameraBase から以下を新クラス `ColorCorrector` に切り出す．
        - フィールド: `TCC_SRGB`, `TCC_XYZ`, `ChannelList`, `ExtendChannels`, `UpdateRate`
        - メソッド: `ExtendMat`, `CalcConvertMatrix`, `ConvertColor`, `ConvertImage`
        - メソッド: `CalcTcc`（チャート RGB 値の受け取りと行列計算・保存を担当）
    ・CameraBase は `ColorCorrector` を保持し，処理を委譲する．

    ■ テスト
    ・ビルドが成功することを確認する．
    ・回帰テスト: 同一入力画像から算出した変換行列が，リファクタリング前と一致することを確認する．
        - 具体的な手順は `TEST_01_テスト仕様.txt` の「2. 回帰テスト」を参照する．

3-3. フェーズ3: チャート検出処理の分離

    ■ 作業内容
    ・`ChartDetection/` フォルダを作成する．
    ・CameraBase から以下を新クラス `ChartDetector` に切り出す．
        - フィールド: `ARDict`, `PointsDst40`, `PointsDst41`, `_detectionCount`, `_lastPosition`
        - メソッド: `DetectChart`
        - 出力: チャートマスクリスト（`List<Mat>`）を戻り値または引数で渡す
    ・CameraBase は `ChartDetector` を保持し，処理を委譲する．

    ■ テスト
    ・ビルドが成功することを確認する．
    ・回帰テスト: 保存済みの実画像を入力として，チャートマスクの位置が一致することを確認する．
        - 具体的な手順は `TEST_01_テスト仕様.txt` の「3. チャート検出テスト」を参照する．

3-4. フェーズ4: ファイル I/O・サウンドの分離

    ■ 作業内容
    ・CameraBase から以下をユーティリティクラスとして切り出す（配置先は `Cameras/` または新フォルダ）．
        - `LoadMatFromCsv`, `SaveMatToCsv`
        - `SetSaveFolder`, `WriteInfo`
        - `EventSound`

    ■ テスト
    ・ビルドが成功することを確認する．
    ・撮影からファイル保存までの一連の動作を手動で確認する．
    ・保存された CSV・画像の内容がリファクタリング前と一致することを確認する．


4. 共通ルール (Common Rules)
------------------------------------------------------------------------
・各フェーズは独立したブランチではなく，`refactor/code-cleanup` ブランチ上で順に進める．
・フェーズ完了ごとにコミットする．コミットメッセージは `[clean]` タグを使用する．
    - 例: `[clean] 色補正処理を ColorCorrector クラスに分離`
・テストが通らない場合は，次のフェーズに進まない．
