# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
module DeleteCampaignGiftOption
  def self.delete(campaign, campaign_gift_option_id)
    ParamValidation.new({:campaign => campaign,
                        :campaign_gift_option_id => campaign_gift_option_id},
    {
                            :campaign => {
                                :required => true,
                                :is_a => Campaign
                            },
                            :campaign_gift_option_id => {
                                :required => true,
                                :is_integer => true
                            }
                        }
    )
    Qx.transaction do
      cgo = campaign.campaign_gift_options.where('id = ? ', campaign_gift_option_id).first
      unless cgo
        raise ParamValidation::ValidationError.new("#{campaign_gift_option_id} is not a valid gift option for campaign #{campaign.id}", {:key => :campaign_gift_option_id})
      end

      if (cgo.campaign_gifts.any?)
        raise ParamValidation::ValidationError.new("#{campaign_gift_option_id} already has campaign gifts. It can't be deleted for safety reasons.", {:key => :campaign_gift_option_id})
      end

      cgo.destroy

      return cgo
    end
  end
end