import * as THREE from 'three';

export class CameraController {
    constructor(game) {
        this.game = game;
        this.camera = game.camera;

        this.yaw = 0;
        this.pitch = 0;
        this.sensitivity = 0.002;
        this.maxPitch = Math.PI / 2 - 0.1;

        this.isLocked = false;

        this.setupPointerLock();
    }

    setupPointerLock() {
        const canvas = this.game.canvas;

        canvas.addEventListener('click', () => {
            if (!this.isLocked && this.game.running) {
                canvas.requestPointerLock();
            }
        });

        document.addEventListener('pointerlockchange', () => {
            this.isLocked = document.pointerLockElement === canvas;
        });

        document.addEventListener('mousemove', (e) => {
            if (!this.isLocked) return;

            this.yaw -= e.movementX * this.sensitivity;
            this.pitch -= e.movementY * this.sensitivity;
            this.pitch = THREE.MathUtils.clamp(this.pitch, -this.maxPitch, this.maxPitch);
        });
    }

    update(dt) {
        // Применяем вращение камеры
        const euler = new THREE.Euler(this.pitch, this.yaw, 0, 'YXZ');
        this.camera.quaternion.setFromEuler(euler);
    }
}
