```python
import bpy
import bmesh
import math
import random

# Clear existing scene
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()

# --- HELPER FUNCTIONS ---
def create_material(name, color=(0.8, 0.8, 0.8, 1), metallic=0.0, roughness=0.5, emission=0, emission_color=(0,0,0,1)):
    mat = bpy.data.materials.new(name=name)
    mat.use_nodes = True
    nodes = mat.node_tree.nodes
    nodes.clear()

    node_principled = nodes.new(type='ShaderNodeBsdfPrincipled')
    node_principled.inputs['Base Color'].default_value = color
    node_principled.inputs['Metallic'].default_value = metallic
    node_principled.inputs['Roughness'].default_value = roughness

    if emission > 0:
        node_principled.inputs['Emission Color'].default_value = emission_color
        node_principled.inputs['Emission Strength'].default_value = emission

    node_output = nodes.new(type='ShaderNodeOutputMaterial')
    mat.node_tree.links.new(node_principled.outputs['BSDF'], node_output.inputs['Surface'])
    return mat

# --- MATERIALS ---
mat_stone = create_material("Stone", color=(0.6, 0.55, 0.5, 1), roughness=0.8)
mat_moss = create_material("Moss", color=(0.1, 0.3, 0.05, 1), roughness=1.0)
mat_iron = create_material("Iron", color=(0.2, 0.2, 0.2, 1), metallic=0.8, roughness=0.4)
mat_glass = create_material("Glass", color=(0.8, 0.9, 1, 0.3), roughness=0.1)
mat_leaf = create_material("Leaf", color=(0.2, 0.6, 0.1, 1), roughness=0.7)
mat_crt = create_material("CRT", color=(0.8, 0.6, 0.1, 1), emission=5, emission_color=(1, 0.7, 0.2, 1))
mat_board = create_material("Board", color=(0, 0.4, 0, 1), emission=2, emission_color=(0, 1, 0, 1))
mat_signal = create_material("Signal", color=(1, 0, 0, 1), emission=10, emission_color=(1, 0, 0, 1))

# --- GEOMETRY CONSTRUCTION ---

# 1. THE SUNKEN CUTTING & TRACKS
# Ground base
bpy.ops.mesh.primitive_plane_add(size=50, location=(0, 0, -5))
ground = bpy.context.active_object
ground.name = "SunkenCutting"
ground.data.materials.append(mat_stone)

# Tracks (Two parallel lanes)
for x_off in [-3, 3]:
    # Rails
    for r_off in [-0.7, 0.7]:
        bpy.ops.mesh.primitive_cylinder_add(radius=0.05, depth=60, location=(x_off + r_off, 0, -4.9))
        rail = bpy.context.active_object
        rail.rotation_euler[0] = math.radians(90)
        rail.data.materials.append(mat_iron)

    # Sleepers
    for y in range(-30, 30, 2):
        bpy.ops.mesh.primitive_cube_add(size=1, location=(x_off, y, -4.95))
        sleeper = bpy.context.active_object
        sleeper.scale = (1.5, 0.2, 0.1)
        sleeper.data.materials.append(mat_stone)

# 2. THE STATION ARCHITECTURE
# Retaining Walls
bpy.ops.mesh.primitive_cube_add(size=1, location=(-10, 0, -2.5))
wall_l = bpy.context.active_object
wall_l.scale = (1, 30, 5)
wall_l.data.materials.append(mat_stone)

bpy.ops.mesh.primitive_cube_add(size=1, location=(10, 0, -2.5))
wall_r = bpy.context.active_object
wall_r.scale = (1, 30, 5)
wall_r.data.materials.append(mat_stone)

# Platform
bpy.ops.mesh.primitive_cube_add(size=1, location=(0, 0, -2))
platform = bpy.context.active_object
platform.scale = (15, 30, 1)
platform.data.materials.append(mat_stone)

# Booking Hall & Columns
for x in [-6, 6]:
    for y in range(-20, 21, 10):
        bpy.ops.mesh.primitive_cylinder_add(radius=0.8, depth=10, location=(x, y, 3))
        col = bpy.context.active_object
        col.data.materials.append(mat_stone)

# Roof Frame (Simplified)
bpy.ops.mesh.primitive_cube_add(size=1, location=(0, 0, 8))
roof = bpy.context.active_object
roof.scale = (14, 30, 0.2)
roof.data.materials.append(mat_iron)

# Clock Tower
bpy.ops.mesh.primitive_cube_add(size=1, location=(-12, -15, 10))
tower = bpy.context.active_object
tower.scale = (4, 4, 20)
tower.data.materials.append(mat_stone)

# Clock Face
bpy.ops.mesh.primitive_cylinder_add(radius=1.5, depth=0.2, location=(-12, -13, 18))
face = bpy.context.active_object
face.rotation_euler[0] = math.radians(90)
face.data.materials.append(create_material("ClockFace", color=(0.9, 0.9, 0.8, 1)))

# 3. NATURE & OVERGROWTH
# Random "Clumps" of greenery
for _ in range(80):
    x = random.uniform(-15, 15)
    y = random.uniform(-30, 30)
    z = -5 if abs(x) > 7 else -2
    bpy.ops.mesh.primitive_ico_sphere_add(radius=random.uniform(0.2, 1.5), location=(x, y, z))
    bush = bpy.context.active_object
    bush.data.materials.append(mat_leaf if random.random() > 0.3 else mat_moss)

# Vines on tower
for i in range(5):
    bpy.ops.mesh.primitive_cylinder_add(radius=0.1, depth=15, location=(-14, -15 + i, 7))
    vine = bpy.context.active_object
    vine.data.materials.append(mat_leaf)

# 4. SPECIAL DETAILS
# CRT Terminal
bpy.ops.mesh.primitive_cube_add(size=0.4, location=(-7, -5, -1))
crt = bpy.context.active_object
crt.data.materials.append(mat_crt)

# Departures Board
bpy.ops.mesh.primitive_cube_add(size=1, location=(0, -10, 4))
board = bpy.context.active_object
board.scale = (3, 0.2, 2)
board.data.materials.append(mat_board)

# Red Signal
bpy.ops.mesh.primitive_cylinder_add(radius=0.1, depth=6, location=(4, 25, -2))
signal_post = bpy.context.active_object
signal_post.data.materials.append(mat_iron)
bpy.ops.mesh.primitive_uv_sphere_add(radius=0.2, location=(4, 25, 1))
signal_light = bpy.context.active_object
signal_light.data.materials.append(mat_signal)

# Signage (Text)
bpy.ops.object.text_add(location=(-8, -20, 1), rotation=(math.radians(90), 0, 0))
txt = bpy.context.active_object
txt.data.body = "RAVENSTHWAITE & DISTRICT RAILWAY Co."
txt.scale = (0.5, 0.5, 0.5)
txt.data.materials.append(mat_iron)

# 5. LIGHTING & CAMERA
# Sun Light
bpy.ops.object.light_add(type='SUN', location=(10, 10, 20))
sun = bpy.context.active_object
sun.data.energy = 6
sun.rotation_euler = (math.radians(45), 0, math.radians(135))

# Fill light for softness
bpy.ops.object.light_add(type='AREA', location=(0, 0, 10))
fill = bpy.context.active_object
fill.data.energy = 500
fill.scale = (10, 10, 1)

# Camera Setup
bpy.ops.object.camera_add(location=(20, -35, 12), rotation=(math.radians(65), 0, math.radians(-45)))
cam = bpy.context.active_object
bpy.context.scene.camera = cam

# World settings (Vivid Blue Sky)
bpy.context.scene.world.use_nodes = True
bg_node = bpy.context.scene.world.node_tree.nodes['Background']
bg_node.inputs[0].default_value = (0.3, 0.6, 1, 1)

# Final Render Settings for Cycles (though harness overrides some)
bpy.context.scene.render.engine = 'CYCLES'
if bpy.app.version >= (4, 0, 0):
    bpy.context.scene.cycles.use_denoising = True
```