$ = require('jquery')
Burger = require('./burger')

Delegate = require('./mixins/delegate')
Events = require('./mixins/events')
Register = require('./mixins/register')

Collection = require('./collection')
Data = require('./data')

findChildren = require('./services/find-children')
warn = require('./util/warn')
mixin = require('./util/mixin')

class Component extends mixin(Events, Delegate, Register)
  @register()

  constructor: (el) ->
    @element = $(el)
    @name = @constructor.name

    unless Burger.findClass(@name)
      warn(
        "You are attempting to instantiate a Burger class without registering it.",
        "Call #{name}.register() after declaring the class."
      )

    @data = new Data(@element)

    children = findChildren(@element)
    @children = new Collection(children)

module.exports = Component
