use std::sync::Arc;
use crate::hit::HittableList;
use crate::material::{DiffuseLight, Lambertian, Metal};
use crate::sphere::Sphere;
use crate::vec3::Vec3;
pub fn cornell_room() -> HittableList {
let mut world = HittableList::new();
let r_wall = 1000.0;
let cream = Arc::new(Lambertian::new(Vec3::new(0.82, 0.76, 0.62)));
let copper = Arc::new(Lambertian::new(Vec3::new(0.55, 0.25, 0.10)));
let amber = Arc::new(Lambertian::new(Vec3::new(0.50, 0.35, 0.10)));
world.push(Arc::new(Sphere::new(
Vec3::new(0.0, -r_wall, 0.0), r_wall, cream.clone(),
)));
world.push(Arc::new(Sphere::new(
Vec3::new(0.0, r_wall + 0.55, 0.0), r_wall, cream.clone(),
)));
world.push(Arc::new(Sphere::new(
Vec3::new(0.0, 0.0, -r_wall - 0.55), r_wall, cream,
)));
world.push(Arc::new(Sphere::new(
Vec3::new(-r_wall - 0.275, 0.0, 0.0), r_wall, copper,
)));
world.push(Arc::new(Sphere::new(
Vec3::new(r_wall + 0.275, 0.0, 0.0), r_wall, amber,
)));
let gold = Arc::new(Metal::new(Vec3::new(1.00, 0.78, 0.35), 0.02));
world.push(Arc::new(Sphere::new(
Vec3::new(-0.10, 0.10, -0.30), 0.10, gold,
)));
let satin_gold = Arc::new(Lambertian::new(Vec3::new(0.78, 0.58, 0.22)));
world.push(Arc::new(Sphere::new(
Vec3::new(0.13, 0.08, -0.20), 0.08, satin_gold,
)));
let light = Arc::new(DiffuseLight::new(Vec3::new(50.0, 38.0, 18.0)));
world.push(Arc::new(Sphere::new(
Vec3::new(0.0, 0.50, -0.30), 0.04, light,
)));
world
}