/**
 * ReportForm component
 *
 * Generated by coz on 2016-12-30,
 * from a template provided by apeman-asset-templates.
 *
 * @function ReportForm
 */
'use strict'

import React from 'react'
import defineDebug from 'debug'
import { clone } from 'asobj'
import {
  ApForm,
  ApFieldSet,
  withForm
} from 'apeman-react-basic'
import SelectField from '../fields/select_field'
import TextField from '../fields/text_field'
import ValueField from '../fields/value_field'
import SubmitField from '../fields/submit_field'

const debug = defineDebug('project:fragment:report-form')

/** @lends ReportForm */
const ReportForm = (props) => {
  let {
    target,
    values,
    types,
    labels,
    idOf,
    onUpdate,
    onSubmit,
    onTakeback,
    errorList,
    errorStyle
  } = props
  let formProps = clone(props, {
    without: [
      'target',
      'onUpdate',
      'onCancel',
      'onTakeback',
      'errors',
      'labels',
      'types'
    ]
  })
  return (
    <ApForm { ...formProps }
            centered
            className='report-form'>
      <ApFieldSet plain>
        { errorList }
        { errorStyle }

        <ValueField id={ idOf('target')}
                    name='target'
                    value={ target }
                    label={ labels.target }
        />

        {
          values.has ? (
              <div>
                <p className="report-message">{ labels.has }</p>
                <SubmitField id={ idOf('takeback')}
                             label={ labels.takeback }
                             onSubmit={ onTakeback }
                             values={ values }
                             primary={ false }
                />
              </div>
            ) : (
              <div>
                <SelectField id={ idOf('type') }
                             name='type'
                             value={ values.type }
                             label={ labels.type }
                             options={ types }
                             onUpdate={ onUpdate }
                />
                <TextField id={ idOf('text') }
                           label={ labels.text }
                           name='text'
                           value={ values.text }
                           rows={ 5 }
                           onUpdate={ onUpdate }
                />
                <SubmitField id={ idOf('submit')}
                             label={ labels.submit }
                             onSubmit={ onSubmit }
                             values={ values }
                />
              </div>
            )
        }
      </ApFieldSet>
    </ApForm>
  )
}

export default withForm(ReportForm)
