class Admin::Legacy::Facility::ActivitiesController < Admin::Legacy::Facility::Controller
  def index
    render_success :ok, json: building_props
  end

  private
    def buildings
      @buildings ||= current_school.facility_buildings.includes(:rooms).order(:name)
    end

    def events_by_room
      @events_by_room ||= current_school.events
        .joins(:room)
        .preload(room: :building)
        .by_date(params[:date])
        .group_by(&:room_id)
    end

    def building_props
      buildings.map do |building|
        {
          id: building.id,
          name: building.name,
          rooms: building.rooms.map { |r| room_props(r) }
        }
      end
    end

    def room_props(room)
      {
        id: room.id,
        name: room.name,
        events: events_by_room[room.id]&.map { |e| event_props(e) } || []
      }
    end

    def event_props(event)
      {}.tap do |prop|
        prop[:id] = event.id
        prop[:name] = event.name
        prop[:all_day] = event.all_day?
        prop[:start] = event.decorate.start_time
        prop[:end] = event.decorate.end_time unless event.all_day?
        prop[:internal] = event.internal?
        prop[:location] = event.location
        prop[:room] = {
          name: event.room&.name,
          number: event.room&.number,
          building: event.building&.name
        }
      end
    end
end
