Behaviour :gen_statem does not implement child_spec

As it states in the error that is raised, you can either define the child_spec/1 function in your module or you have to pass a child specification as a map:

** (ArgumentError) The module FooBar was given as a child to a supervisor
but it does not implement child_spec/1.

If you own the given module, please define a child_spec/1 function
that receives an argument and returns a child specification as a map.
For example:

    def child_spec(opts) do
      %{
        id: __MODULE__,
        start: {__MODULE__, :start_link, [opts]},
        type: :worker,
        restart: :permanent,
        shutdown: 500
      }
    end

Note that "use Agent", "use GenServer" and so on automatically define
this function for you.

However, if you don't own the given module and it doesn't implement
child_spec/1, instead of passing the module name directly as a supervisor
child, you will have to pass a child specification as a map:

    %{
      id: FooBar,
      start: {FooBar, :start_link, [arg1, arg2]}
    }

See the Supervisor documentation for more information