module Forms
  module BulkUploadResume
    class Confirm
      include ActiveModel::Model
      include ActiveModel::Attributes
      include Rails.application.routes.url_helpers

      attribute :log_type
      attribute :bulk_upload

      def view_path
        "bulk_upload_#{log_type}_resume/confirm"
      end

      def back_path
        send("page_bulk_upload_#{log_type}_resume_path", bulk_upload, page: "fix-choice")
      end

      def next_path
        send("resume_bulk_upload_#{log_type}_result_path", bulk_upload)
      end

      def error_report_path
        if BulkUploadErrorSummaryTableComponent.new(bulk_upload:).errors?
          send("summary_bulk_upload_#{log_type}_result_path", bulk_upload)
        else
          send("bulk_upload_#{log_type}_result_path", bulk_upload)
        end
      end

      def save!
        ApplicationRecord.transaction do
          processor = BulkUpload::Processor.new(bulk_upload:)
          processor.approve

          bulk_upload.update!(choice: "create-fix-inline")
        end

        true
      end

      def preflight_valid?
        bulk_upload.choice != "create-fix-inline" && bulk_upload.choice != "bulk-confirm-soft-validations"
      end

      def preflight_redirect
        case bulk_upload.choice
        when "create-fix-inline"
          send("page_bulk_upload_#{log_type}_resume_path", bulk_upload, :chosen)
        when "bulk-confirm-soft-validations"
          send("page_bulk_upload_#{log_type}_soft_validations_check_path", bulk_upload, :chosen)
        end
      end
    end
  end
end