# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
module QueryCampaignMetrics

  def self.on_donations(campaign_id)
    campaign = Campaign.find(campaign_id)

    result = Qx.select(
        "COALESCE(COUNT(DISTINCT donations.id), 0) AS supporters_count",
        "COALESCE(SUM(payments.gross_amount), 0) AS total_raised"
         )
      .from("campaigns")
      .join(
        ["donations", "donations.campaign_id=campaigns.id"],
        ["payments", "payments.donation_id=donations.id"]
      )
      .where("campaigns.id IN (#{QueryCampaigns
                                     .get_campaign_and_children(campaign_id)
                                     .parse
      })")
      .execute
      .last

    return {
        'supporters_count' => result['supporters_count'],
        'total_raised'=> result['total_raised'],
        'goal_amount'=> campaign.goal_amount,
        'show_total_count'=> campaign.show_total_count,
        'show_total_raised'=> campaign.show_total_raised
    }
  end
end