module Adamantium
  module Actions
    module Workouts
      class Create < Action
        include Deps["geo.gpx_parser", "commands.workouts.create"]

        def handle(req, res)
          tempfile = Tempfile.new(%w[path .gpx])

          if !req.params.to_h.dig(:file, :tempfile).nil?
            tempfile.write req.params[:file][:tempfile].read
          else
            tempfile.write req.params[:file]
          end

          tempfile.rewind

          gpxfile = gpx_parser.call(path: tempfile.path)

          if gpxfile.success?
            create.call(**gpxfile.value!)
            res.status = 201
          else
            res.status = 500
          end
        ensure
          tempfile.close
          tempfile.unlink
        end
      end
    end
  end
end
