-- Deploy camper:unset_season_range to pg
-- requires: roles
-- requires: schema_camper
-- requires: season_calendar

begin;

set search_path to camper, public;

create or replace function unset_season_range(range daterange) returns void as
$$
declare
	tmp_range daterange;
	tmp_id integer;
begin
	delete from season_calendar where range @> season_range;

	for tmp_id, tmp_range in
		select season_id, season_range
		from season_calendar
		where season_range @> range
	loop
		delete from season_calendar where season_id = tmp_id and season_range = tmp_range;
		insert into season_calendar (season_id, season_range)
		values (tmp_id, daterange(lower(tmp_range), lower(range)))
		     , (tmp_id, daterange(upper(range), upper(tmp_range)))
		;
	end loop;

	update season_calendar
	set season_range = season_range - range
	where season_range && range
	  and season_range < range
	;

	update season_calendar
	set season_range = season_range - (season_range * range)
	where season_range && range
	  and season_range > range
	;
end
$$
	language plpgsql
;

revoke execute on function unset_season_range(daterange) from public;
grant execute on function unset_season_range(daterange) to admin;

commit;
