module Public
  class LiveController < SiteBaseController
    layout "marketing_live"

    ACTIVE_STATUSES = %w[live connecting reconnecting].freeze

    def index
      @query = params[:q].to_s.strip
      @sessions = StreamSession
        .broadcasting
        .includes(:score_state, match: :team)
        .search_by_team_or_opponent(@query)
        .order(Arel.sql("started_at DESC NULLS LAST"), created_at: :desc)

      @online_paths = Mediamtx::Client.new.online_path_names
    end

    def show
      @session = StreamSession.includes(match: :team).find(params[:id])
      @match = @session.match
      @stream_closed = @session.terminal?
      @on_air = !@stream_closed && mediamtx_online?(@session)
    end

    def status
      session = StreamSession.includes(match: :team).find(params[:id])
      closed = session.terminal?
      render json: {
        status: session.status,
        stream_closed: closed,
        live: !closed && (session.live? || mediamtx_online?(session)),
        on_air: !closed && mediamtx_online?(session),
        ended_at: session.ended_at,
        home_name: session.match.team.name,
        away_name: session.match.opponent_name,
        score: session.score_state&.as_cable_payload
      }
    end

    private

    def mediamtx_online?(session)
      @online_paths_cache ||= Mediamtx::Client.new.online_path_names
      @online_paths_cache.include?(session.mediamtx_path_name)
    end
  end
end
