React = require 'react'
animationMixin = require '../mixins/animation_mixin'
NoAccess = React.createFactory require('./no_access')

{div, button} = React.DOM

AlertModal = React.createClass
  
  displayName: 'AlertModal'

  mixins: [animationMixin]

  enterStateStart:
    scale: .9
  enterStateEnd:
    scale: 1
  enterEasing: 'easeOutElastic'
  enterDuration: 600

  propTypes:
    close: React.PropTypes.func.isRequired 
    okText: React.PropTypes.string
    cancelText: React.PropTypes.string
    cb: React.PropTypes.func
    message: React.PropTypes.oneOfType([
      React.PropTypes.string
      React.PropTypes.element
    ]).isRequired
    

  getDefaultProps: ->
    okText: 'OK'
    cancelText: 'Cancel'

  handleClick: (e) ->
    e.stopPropagation()

  close: -> @props.close()

  confirm: ->
    # Fire a callback if present
    @props.cb?()
    @props.close()

  render: ->
    {scale} = @state
    {message, okText, cancelText, cb} = @props
    messageAsChild = typeof message is 'object'

    div {
      className: 'modal alert'
      onClick: @handleClick
      style:
        transform: "scale(#{scale})"
        WebkitTransform: "scale(#{scale})"
        msTransform: "scale(#{scale})"
    }, [
      div {
        key: 'message'
        className: 'message'
      }, if messageAsChild then message else NoAccess {
          displayText: message
          styleOverrides:
            fontSize: '14px'
            background: 'none'
            paddingTop: 10
        }
      div {
        key: 'ok'
        className: 'buttons'
      }, [
        button {
          className: 'okay-cancel cancel'
          key: 'cancel'
          onClick: @close
        }, cancelText if cb?
        button {
          className: if cb? then 'okay-cancel okay' else 'prmy ok'
          key: 'ok'
          onClick: @confirm
        }, okText
      ]
    ]

module.exports = AlertModal