class UserMailer < ApplicationMailer
  def new_registration
    @user = params[:user]
    mail subject: Locale.load('user_mailer.new_registration.subject'),
         to: @user.email,
         from: Parameter.load('user_mailer.new_registration.from') || self.class.default[:from],
         reply_to: Parameter.load('user_mailer.new_registration.reply_to'),
         cc: Parameter.load('user_mailer.new_registration.cc'),
         bcc: Parameter.load('user_mailer.new_registration.bcc')
  end

  def registration_request
    @user = params[:user]
    @link = view_context.link_to(Locale.load('user_mailer.registration_request.link'), pixpalace.client_url(@user))
    mail subject: Locale.load('user_mailer.registration_request.subject', full_name: @user.full_name, company: @user.company),
         to: Parameter.load('user_mailer.registration_request.to'),
         from: Parameter.load('user_mailer.registration_request.from') || self.class.default[:from],
         reply_to: Parameter.load('user_mailer.registration_request.reply_to'),
         cc: Parameter.load('user_mailer.registration_request.cc'),
         bcc: Parameter.load('user_mailer.registration_request.bcc')
  end

  def new_user_created
    @user = params[:user]
    @password = params[:password]
    @link = view_context.link_to(Parameter.load('user_mailer.registration_accepted.link'), external_url_for(Parameter.load('user_mailer.registration_accepted.link')))
    mail subject: Locale.load('user_mailer.new_user_created.subject'),
         to: @user.email,
         from: Parameter.load('user_mailer.new_user_created.from') || self.class.default[:from],
         reply_to: Parameter.load('user_mailer.new_user_created.reply_to'),
         cc: Parameter.load('user_mailer.new_user_created.cc'),
         bcc: Parameter.load('user_mailer.new_user_created.bcc')
  end

  def registration_accepted
    @user = params[:user]
    @link = view_context.link_to(Parameter.load('user_mailer.registration_accepted.link'), external_url_for(Parameter.load('user_mailer.registration_accepted.link')))
    mail subject: Locale.load('user_mailer.registration_accepted.subject'),
         to: @user.email,
         from: Parameter.load('user_mailer.registration_accepted.from') || self.class.default[:from],
         reply_to: Parameter.load('user_mailer.registration_accepted.reply_to'),
         cc: Parameter.load('user_mailer.registration_accepted.cc'),
         bcc: Parameter.load('user_mailer.registration_accepted.bcc')
  end

  def registration_rejected
    @user = params[:user]
    mail subject: Locale.load('user_mailer.registration_rejected.subject'),
         to: @user.email,
         from: Parameter.load('user_mailer.registration_rejected.from') || self.class.default[:from],
         reply_to: Parameter.load('user_mailer.registration_rejected.reply_to'),
         cc: Parameter.load('user_mailer.registration_rejected.cc'),
         bcc: Parameter.load('user_mailer.registration_rejected.bcc')
  end

  def reset_password_instructions(token)
    @user = params[:user]
    @token = token
    mail subject: Locale.load('user_mailer.reset_password_instructions.subject'),
         to: @user.email,
         from: Parameter.load('user_mailer.reset_password_instructions.from') || self.class.default[:from],
         reply_to: Parameter.load('user_mailer.reset_password_instructions.reply_to'),
         cc: Parameter.load('user_mailer.reset_password_instructions.cc'),
         bcc: Parameter.load('user_mailer.reset_password_instructions.bcc')
  end

  def imported
    @user = params[:user]
    link = main_app.edit_user_password_url(reset_password_token: params[:token])
    @link = view_context.link_to(link, link)
    mail subject: Locale.load('user_mailer.imported.subject'),
         to: @user.email,
         from: Parameter.load('user_mailer.imported.from') || self.class.default[:from],
         reply_to: Parameter.load('user_mailer.imported.reply_to'),
         cc: Parameter.load('user_mailer.imported.cc'),
         bcc: Parameter.load('user_mailer.imported.bcc')
  end

  def imported_report
    @user = params[:user]
    @results = params[:results]
    @original_filename = params[:original_filename]
    @count = @results.reduce({ ok: 0, error: 0 }) do |reducer, result|
      reducer.tap do |r|
        if result[:result] == 'OK'
          r[:ok] += 1
        else
          r[:error] += 1
        end
      end
    end
    filename = "#{File.basename(@original_filename, '.csv')} - Report #{Time.now.strftime('%d-%m-%Y %Hh%M')}.csv"
    attachments[filename] = params[:report]
    mail subject: I18n.t('user_mailer.imported_report.subject') % { server: Server.find_by(is_self: true)&.name },
         to: @user.email,
         from: Parameter.load('user_mailer.imported_report.from') || self.class.default[:from],
         reply_to: Parameter.load('user_mailer.imported_report.reply_to'),
         cc: Parameter.load('user_mailer.imported_report.cc'),
         bcc: Parameter.load('user_mailer.imported_report.bcc')
  end

  private

  def external_url_for(url)
    if url.present?
      url.include?('//') ? url : "https://#{url}"
    end
  end
end
