# frozen_string_literal: true

require 'abstract_controller'
require 'action_controller'
require 'action_view'
require 'active_record'

# require any helpers
require './app/helpers/application_helper'

# There routines will generate Excel files containing data dumped from database
class UsersExportService
  # export subscriptions
  def export_subscriptions(export)
    @subscriptions = Subscription.all.includes(:plan, statistic_profile: [user: [:profile]])

    content = ApplicationController.render(
      template: 'exports/users_subscriptions',
      locals: { subscriptions: @subscriptions },
      handlers: [:axlsx],
      formats: [:xlsx]
    )
    # write content to file
    File.binwrite(export.file, content)
  end

  # export reservations
  def export_reservations(export)
    @reservations = Reservation.all.includes(:slots, :reservable, statistic_profile: [user: [:profile]])

    content = ApplicationController.render(
      template: 'exports/users_reservations',
      locals: { reservations: @reservations },
      handlers: [:axlsx],
      formats: [:xlsx]
    )
    # write content to file
    File.binwrite(export.file, content)
  end

  # export members
  def export_members(export)
    @members = User.members
                   .includes(:group, :tags, :projects, :profile,
                             invoicing_profile: [:invoices, :address, { organization: [:address] }],
                             statistic_profile: [:trainings, { subscriptions: [:plan] }])

    content = ApplicationController.render(
      template: 'exports/users_members',
      locals: { members: @members },
      handlers: [:axlsx],
      formats: [:xlsx]
    )
    # write content to file
    File.binwrite(export.file, content)
  end
end