<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Interactive 3D Cosmos</title>
    <style>
        body { margin: 0; }
        canvas { display: block; }
        #info-box {
            position: fixed;
            top: 10px;
            left: 10px;
            background: rgba(0, 0, 0, 0.7);
            color: white;
            padding: 10px;
            font-family: Arial, sans-serif;
            font-size: 16px;
            display: none;
        }
    </style>
</head>
<body>
    <div id="info-box"></div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/controls/OrbitControls.min.js"></script>

    <script>
        let scene, camera, renderer, controls;
        let raycaster, mouse;
        let starField, planet;
        let infoBox = document.getElementById('info-box');

        init();
        animate();

        function init() {
            // Set up scene
            scene = new THREE.Scene();
            scene.background = new THREE.Color(0x000000);

            // Set up camera
            camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
            camera.position.z = 20;

            // Set up renderer
            renderer = new THREE.WebGLRenderer();
            renderer.setSize(window.innerWidth, window.innerHeight);
            document.body.appendChild(renderer.domElement);

            // Set up controls
            controls = new THREE.OrbitControls(camera, renderer.domElement);

            // Set up raycaster for detecting click events
            raycaster = new THREE.Raycaster();
            mouse = new THREE.Vector2();

            // Create stars
            createStars();

            // Create planets
            createPlanets();

            // Event listener for mouse click
            window.addEventListener('click', onClick, false);
        }

        function createStars() {
            let geometry = new THREE.SphereGeometry(0.1, 24, 24);
            let material = new THREE.MeshBasicMaterial({ color: 0xFFFFFF });
            for (let i = 0; i < 1000; i++) {
                let star = new THREE.Mesh(geometry, material);
                star.position.x = Math.random() * 100 - 50;
                star.position.y = Math.random() * 100 - 50;
                star.position.z = Math.random() * 100 - 50;
                scene.add(star);
            }
        }

        function createPlanets() {
            let geometry = new THREE.SphereGeometry(2, 32, 32);
            let material = new THREE.MeshBasicMaterial({ color: 0x0077FF });
            planet = new THREE.Mesh(geometry, material);
            planet.position.set(5, 0, 0);
            scene.add(planet);
        }

        function onClick(event) {
            // Get mouse coordinates in normalized device coordinates
            mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
            mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;

            // Set raycaster to the camera and mouse coordinates
            raycaster.update();

            // Cast ray
            let intersects = raycaster.intersectObjects([planet]);

            if (intersects.length > 0) {
                let planetData = "Planet X: A mysterious planet, known for its bright blue hue and massive rings.";
                displayInfo(planetData);
            }
        }

        function displayInfo(info) {
            infoBox.style.display = "block";
            infoBox.innerHTML = info;
        }

        function animate() {
            requestAnimationFrame(animate);
            controls.update();
            renderer.render(scene, camera);
        }

        // Resize listener
        window.addEventListener('resize', onWindowResize, false);
        function onWindowResize() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        }
    </script>
</body>
</html>