#if SELFTEST
using System;
using System.Drawing;

namespace TIASshot {
    public partial class PreviewMonitor {

        /// <summary>
        /// 副ディスプレイが接続されている状態を模す（SELFTEST 限定）．
        /// IsShown は副ディスプレイ検出時に設定される _size で決まるため，ヘッドレス環境でも
        /// Form1.ShowImage の副モニタ給餌経路（FastClone → UpdateImage）を通せるようにする．
        /// </summary>
        /// <param name="size">模擬する副ディスプレイのサイズ</param>
        internal void SelfTestForceShown(Size size) {
            _size = size;
        }

        /// <summary>
        /// 再描画タイマーの Tick 処理（RefreshTimer_Tick）を 1 回実行する（UI スレッドから呼ぶこと）．
        /// ヘッドレスでは Load が発火せずタイマーが開始されないため，Tick を直接駆動する．
        /// </summary>
        internal void SelfTestRefresh() {
            RefreshTimer_Tick(this, EventArgs.Empty);
        }

        /// <summary>副モニタ（picPreview）に現在表示中の画像</summary>
        internal Image SelfTestDisplayedImage => picPreview.Image;

        /// <summary>タイマー停止と表示用 Bitmap の解放（Dispose の前に UI スレッドで呼ぶ）</summary>
        internal void SelfTestShutdown() {
            _refreshTimer.Stop();
            var shown = picPreview.Image;
            picPreview.Image = null;
            shown?.Dispose();
            Bitmap pending;
            lock (_dispBufLock) {
                pending = _dispBuf;
                _dispBuf = null;
                _isUpdateBuf = false;
            }
            pending?.Dispose();
        }
    }
}
#endif
