# intermediate config
bcConf = Crafty.clone CONF.bigcard

################
# BigCard
################
Crafty.c 'BigCard',
  # Mouse interactivity, Tween (animation smooth)
  required: '2D, Canvas, Mouse, MouseWheel, Draggable, Tween'

  # always in focus layer
  init: ->
    @z = CONF.layer.focus
    return

  events:
    # copy attributes of target card
    Copy: (target) ->
      @target = target
      @attr {
        x: @target._x
        y: @target._y
        w: @target._w
        h: @target._h
        alpha: 0.5
      }
      @origin 'center'
      return

    # transition into zoom version
    Enlarge: ->
      # set new origin on finished animation
      @one 'TweenEnd', ->
        @origin 'center'
        return

      # start animation
      @tween {
        x: bcConf.x
        y: bcConf.y
        w: bcConf.w
        h: bcConf.h
        alpha: 1
      }, CONF.anim.time, CONF.anim.func
      return

    # fade out and destroy
    Fade: ->
      # remove this on finished animation
      @one 'TweenEnd', ->
        @destroy()
        return

      # transition back to target card
      @tween {
        x: @target._x
        y: @target._y
        w: @target._w
        h: @target._h
        alpha: 0.5
      }, CONF.anim.time, CONF.anim.func
      return

    # fade on right click, reset on middle click
    MouseUp: (e) ->
      switch e.mouseButton
        when Crafty.mouseButtons.RIGHT
          @trigger 'Fade'
        when Crafty.mouseButtons.MIDDLE
          # reset intermediate config, then reset zoom
          bcConf = Crafty.clone CONF.bigcard
          @trigger 'Enlarge'
      return

    # zoom in and out
    MouseWheelScroll: (e) ->
      if e.target == @
        # save origin
        origin =
          x: @ox
          y: @oy

        # new attributes
        @attr {
          w: @_w * (1 + e.direction * 0.1)
          h: @_h * (1 + e.direction * 0.1)
        }
        @origin 'center'

        # restore origin
        @attr {
          ox: origin.x
          oy: origin.y
        }

        # update intermediate config
        bcConf.x = @_x
        bcConf.y = @_y
        bcConf.w = @_w
        bcConf.h = @_h
      return

    StopDrag: ->
      # update intermediate config
      bcConf.x = @_x
      bcConf.y = @_y
      return
