-------------------------
-- Sky Layers: Demo
-- Allows quickly test skylayer api

-- Demo disabled by default, see init.lua to enable it.
-- Git: https://gitlab.com/rautars/skylayer

-- License: MIT
-- Credits: rautars

-------------------------

local gradient_plain_with_clouds_sky = function(player_name)
	local sl = {}
	sl.name = "gradient_plain_with_clouds_sky"
	sl.sky_data = {
		gradient_colors = {
			{ r = 68, g = 34, b = 153 },
			{ r = 59, g = 12, b = 189 },
			{ r = 51, g = 17, b = 187 },
			{ r = 68, g = 68, b = 221 },
			{ r = 17, g = 170, b = 187 },
			{ r = 18, g = 189, b = 185 },
			{ r = 34, g = 204, b = 170 },
			{ r = 105, g = 208, b = 37 },
			{ r = 170, g = 204, b = 34 },
			{ r = 208, g = 195, b = 16 },
			{ r = 204, g = 187, b = 51 },
			{ r = 254, g = 174, b = 45 },
			{ r = 255, g = 153, b = 51 },
			{ r = 255, g = 102, b = 68 },
			{ r = 255, g = 68, b = 34 },
			{ r = 255, g = 51, b = 17 },
			{ r = 248, g = 12, b = 18 },
			{ r = 255, g = 51, b = 17 },
			{ r = 255, g = 68, b = 34 },
			{ r = 255, g = 102, b = 68 },
			{ r = 255, g = 153, b = 51 },
			{ r = 254, g = 174, b = 45 },
			{ r = 204, g = 187, b = 51 },
			{ r = 208, g = 195, b = 16 },
			{ r = 170, g = 204, b = 34 },
			{ r = 105, g = 208, b = 37 },
			{ r = 34, g = 204, b = 170 },
			{ r = 18, g = 189, b = 185 },
			{ r = 17, g = 170, b = 187 },
			{ r = 68, g = 68, b = 221 },
			{ r = 51, g = 17, b = 187 },
			{ r = 59, g = 12, b = 189 }
		}
	}
	sl.clouds_data = {
		gradient_colors = {
			{ r = 34, g = 204, b = 170 },
			{ r = 105, g = 208, b = 37 },
			{ r = 170, g = 204, b = 34 },
			{ r = 208, g = 195, b = 16 },
			{ r = 204, g = 187, b = 51 },
			{ r = 254, g = 174, b = 45 },
			{ r = 255, g = 68, b = 34 },
			{ r = 255, g = 102, b = 68 },
			{ r = 255, g = 153, b = 51 },
			{ r = 254, g = 174, b = 45 },
			{ r = 59, g = 12, b = 189 }
		},
		speed = { x = 110, z = -400 }
	}
	sl.sun_data = {
		visible = false,
		sunrise_visible = false
	}
	sl.moon_data = {
		visible = false
	}
	skylayer.add_layer(player_name, sl)
end

local plain_without_clouds_sky = function(player_name)
	local sl = {}
	sl.name = "plain_without_clouds_sky"
	sl.sky_data = {
		base_color = { r = 0, g = 0, b = 0 },
		clouds = false
	}
	skylayer.add_layer(player_name, sl)
end

local skybox_with_defaults_sky = function(player_name)
	local sl = {}
	sl.name = "skybox_with_defaults_sky"
	sl.sky_data = {
		type = "skybox",
		textures = {
			"skylayer_demo_stars_sky.png",
			"skylayer_demo_stars_sky.png",
			"skylayer_demo_stars_sky.png",
			"skylayer_demo_stars_sky.png",
			"skylayer_demo_stars_sky.png",
			"skylayer_demo_stars_sky.png"
		}
	}
	sl.stars_data = {
		visible = false
	}
	skylayer.add_layer(player_name, sl)
end

local custom_moon_with_gradient_stars_sky = function(player_name)
	local sl = {}
	sl.name = "custom_moon_with_gradient_stars_sky"
	sl.moon_data = {
		texture = "skylayer_demo_cold_moon.png",
	}
	sl.stars_data = {
		scale = 2,
		gradient_star_colors = {
			{r=100, g=26, b=0},
			{r=100, g=76, b=0},
			{r=100, g=0, b=24},
		}
	}
	skylayer.add_layer(player_name, sl)
end

local custom_sun_with_default_sky = function(player_name)
	local sl = {}
	sl.name = "custom_sun_with_default_sky"
	sl.sun_data = {
		texture = "skylayer_demo_hot_sun.png",
		scale = 3
	}
	skylayer.add_layer(player_name, sl)
end

local plain_sky_colors_with_defaults_sky = function(player_name)
	local sl = {}
	sl.name = "plain_sky_colors_with_defaults_sky"
	sl.sky_data = {
		sky_color = {
			day_sky = "#FBF704",
			day_horizon = "#F704FB",
			dawn_sky = "#EB1914",
			dawn_horizon = "#49FF00",
			night_sky = "#0F00FF",
			night_horizon = "#FF5200",
			indoors = "#D9EE11",
			fog_sun_tint = "#E0901F",
			fog_moon_tint = "#6E9A65"
		}
	}
	skylayer.add_layer(player_name, sl)
end

local gradient_plain_sky_colors_with_defaults_sky = function(player_name)
	local sl = {}
	sl.name = "gradient_plain_sky_colors_with_defaults_sky"
	sl.sky_data = {
		gradient_sky = {
			day_sky = {
				{ r = 100, g = 0, b = 6},
				{ r = 6, g = 100, b = 0},
				{ r = 0, g = 6, b = 100}
			},
			day_horizon = {
				{ r = 100, g = 56, b = 0},
				{ r = 42, g = 100, b = 0},
				{ r = 92, g = 100, b = 0}
			},
			night_sky = {
				{ r = 0, g = 255, b = 87},
				{ r = 250, g = 187, b = 100},
				{ r = 255, g = 82, b = 0}
			},
			night_horizon = {
				{ r = 87, g = 100, b = 0},
				{ r = 0, g = 87, b = 100},
				{ r = 100, g = 0, b = 87}
			},
		}
	}
	skylayer.add_layer(player_name, sl)
end

local sky_definitions = {}
table.insert(sky_definitions, {name = "gradient_plain_with_clouds_sky", func = gradient_plain_with_clouds_sky})
table.insert(sky_definitions, {name = "plain_without_clouds_sky", func = plain_without_clouds_sky})
table.insert(sky_definitions, {name = "skybox_with_defaults_sky", func = skybox_with_defaults_sky})
table.insert(sky_definitions, {name = "custom_moon_with_gradient_stars_sky", func = custom_moon_with_gradient_stars_sky})
table.insert(sky_definitions, {name = "custom_sun_with_default_sky", func = custom_sun_with_default_sky})
table.insert(sky_definitions, {name = "plain_sky_colors_with_defaults_sky", func = plain_sky_colors_with_defaults_sky})
table.insert(sky_definitions, {name = "gradient_plain_sky_colors_with_defaults_sky", func = gradient_plain_sky_colors_with_defaults_sky})

-- register commands for demo for sky definitions from sky_definitions array
local counter = 1
for _, definition in pairs(sky_definitions) do
	minetest.register_chatcommand("sl_demo" .. counter .. "_on", {
		params = "<player_name>",
		description = "Sets sky ".. definition.name .." for a player",
		func = function(name, player_name)
			if player_name == nil or player_name == "" then
				player_name = name
			end
			definition.func(player_name)
		end
	})
	minetest.register_chatcommand("sl_demo" .. counter .. "_off", {
		params = "<player_name>",
		description = "Turn off sky ".. definition.name .. " for a player",
		func = function(name, player_name)
			if player_name == nil or player_name == "" then
				player_name = name
			end
			skylayer.remove_layer(player_name, definition.name)
		end
	})
	counter = counter + 1
end
