import { Camera, director, find, view, ResolutionPolicy } from 'cc';
import { DESIGN_WIDTH, DESIGN_HEIGHT } from './GridConstants';

/**
 * 编辑器内嵌左栏：先 setFrameSize 铺满容器，再 FIXED_WIDTH 按宽适配（与 test.001code.com 一致）。
 * 须配合 loader 在 resize 时调用 view.setFrameSize(clientW, clientH)。
 */
export function applyEmbeddedDesignResolution(): void {
    view.resizeWithBrowserSize(true);
    const frame = view.getFrameSize();
    if (frame.width <= 0 || frame.height <= 0) {
        view.setDesignResolutionSize(DESIGN_WIDTH, DESIGN_HEIGHT, ResolutionPolicy.FIXED_WIDTH);
        syncEmbeddedCamerasOrtho();
        return;
    }
    view.setDesignResolutionSize(DESIGN_WIDTH, DESIGN_HEIGHT, ResolutionPolicy.FIXED_WIDTH);
    syncEmbeddedCamerasOrtho();
}

/** 内嵌画布当前可视半高（设计坐标） */
export function getEmbeddedOrthoHalf(): number {
    const vis = view.getVisibleSize();
    return (vis.height > 0 ? vis.height : DESIGN_HEIGHT) / 2;
}

/** 主相机 / 背景 / HUD 相机正交高度须与可视高度一致，否则关卡与 HUD 错位 */
export function syncEmbeddedCamerasOrtho(): void {
    const halfH = getEmbeddedOrthoHalf();
    const scene = director.getScene();
    if (!scene) return;
    for (const camName of ['UICamera', 'BgCamera', 'Main Camera']) {
        const cam = find(camName, scene)?.getComponent(Camera);
        if (cam) cam.orthoHeight = halfH;
    }
    const mainNode = find('Main Camera', scene);
    if (mainNode) mainNode.setPosition(0, 0, mainNode.position.z);
    (globalThis as { __tfrhSyncHudOrtho?: () => void }).__tfrhSyncHudOrtho = syncEmbeddedCamerasOrtho;
}

/** @deprecated 使用 syncEmbeddedCamerasOrtho */
export function syncHudCameraOrtho(): void {
    syncEmbeddedCamerasOrtho();
}
