exports.Actor = class extends require('../actor').Actor

  @build: (freakset, scope, opts, fn) ->
    [freakset, scope, opts, fn] = @::ensureArgs(arguments...)

    if typeof opts == "function"
      fn = opts
      opts = undefined

    opts ||= {}
    opts.parallel ||= no

    innerFreakset = freakset.klass.build( store: freakset.store, outerFreakset: freakset, runInParallel: opts.parallel)
    freakset.modifyStack freakset, { type: "group", scope: scope, fn: fn, innerFreakset: innerFreakset, parallel: opts.parallel }, opts
    freakset.innerFreaksets.push(innerFreakset)
    fn(innerFreakset)
    return innerFreakset

  @run: (freakset, actor) ->
    freakset.buildAndRunFreakset(stack: actor.innerFreakset.stack, store: freakset.store, outerFreakset: freakset, runInParallel: actor.parallel)
