import bpy
import math
from mathutils import Vector


bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=False)
bpy.ops.import_scene.gltf(filepath="/home/vela/Music/temp6_model.glb")

meshes = [obj for obj in bpy.context.scene.objects if obj.type == "MESH"]
corners = []
for obj in meshes:
    corners.extend(obj.matrix_world @ Vector(corner) for corner in obj.bound_box)

minimum = Vector((min(v.x for v in corners), min(v.y for v in corners), min(v.z for v in corners)))
maximum = Vector((max(v.x for v in corners), max(v.y for v in corners), max(v.z for v in corners)))
center = (minimum + maximum) * 0.5
radius = max((maximum - minimum)) * 0.5

world = bpy.context.scene.world
world.use_nodes = True
world.node_tree.nodes["Background"].inputs["Color"].default_value = (0.78, 0.73, 0.66, 1.0)
world.node_tree.nodes["Background"].inputs["Strength"].default_value = 0.55

camera_data = bpy.data.cameras.new("Inspection Camera")
camera = bpy.data.objects.new("Inspection Camera", camera_data)
bpy.context.scene.collection.objects.link(camera)
bpy.context.scene.camera = camera
camera.data.lens = 58

key_data = bpy.data.lights.new("Key", type="AREA")
key_data.energy = 850
key_data.shape = "DISK"
key_data.size = radius * 3.2
key = bpy.data.objects.new("Key", key_data)
bpy.context.scene.collection.objects.link(key)
key.location = center + Vector((-radius * 2.2, -radius * 2.8, radius * 3.0))

fill_data = bpy.data.lights.new("Fill", type="AREA")
fill_data.energy = 420
fill_data.size = radius * 2.4
fill = bpy.data.objects.new("Fill", fill_data)
bpy.context.scene.collection.objects.link(fill)
fill.location = center + Vector((radius * 2.6, radius * 1.4, radius * 1.6))

scene = bpy.context.scene
scene.render.engine = "BLENDER_EEVEE"
scene.render.resolution_x = 1080
scene.render.resolution_y = 1080
scene.render.resolution_percentage = 100
scene.render.image_settings.file_format = "PNG"
scene.render.film_transparent = False


def point_camera(position):
    camera.location = position
    camera.rotation_euler = ((center - position).to_track_quat("-Z", "Y")).to_euler()


views = [
    ("three-quarter", center + Vector((radius * 2.8, -radius * 4.0, radius * 1.15))),
    ("side", center + Vector((radius * 4.5, 0.0, radius * 0.7))),
]

for name, position in views:
    point_camera(position)
    scene.render.filepath = f"/home/vela/workspace/domain/tn-silver/web/tn-site/.runtime/inspection/temp6-{name}.png"
    bpy.ops.render.render(write_still=True)
