import React, { Component } from 'react';
import './index.scss'
import { HeaderBar } from "src/common/index"
import storage from 'store2'
import { Toast } from "antd-mobile";
import { http } from "src/utils"
import classnames from 'classnames'
import { Link } from "react-router-dom";
import { isEmpty } from 'lodash'


class SubmitAnswer extends Component {

  store = storage.namespace('aiTestExam')
  timer = null

  state = {
    time: this.store.session.get('time') || {d: 0, h: 0, m: 0, s: 0},
    answer: this.store.session.get('answer'),
    recordId: this.store.session.get('recordId'),
    analysis: [],
    results: [],
    elapsed: this.store.session.get('elapsed'),
  }

  componentDidMount() {
    if (isEmpty(this.state.answer) || !this.state.recordId) {
      this.props.history.replace('/ai-test')
      this.store.session.remove('submitted')
    }
    if (this.store.session.get('submitted')) {
      this.getAnalysis()
    } else {
      this.setCounter()
    }
  }

  componentWillUnmount() {
    clearInterval(this.timer)
  }


  setCounter = () => {
    this.timer = setInterval(() => {
      this.setState(state => {
        const fms = state.elapsed + 1
        return {
          time: {
            d: Math.floor(fms / (60 * 60 * 100 * 24)),
            h: Math.floor(fms / (60 * 60 * 100)) % 24,
            m: Math.floor(fms / (60 * 100)) % 60,
            s: Math.floor(fms / 100) % 60,
          },
          elapsed: fms,
        }
      })
    }, 10)
  }


  submit = () => {
    const {answer, recordId} = this.state
    http.post(`${API.home}/sys/submit_answer`, {
      answer: JSON.stringify(answer),
      cost_time: this.state.elapsed * 10,
      record_id: recordId,
    }).then(res => {
      const {code, msg} = res.data
      if (code === 200) {
        this.store.session.set('submitted', true)
        this.store.session.set('elapsed', this.state.elapsed)
        this.store.session.set('time', this.state.time)
        clearInterval(this.timer)
        this.props.history.push('/ai-test/report')
      } else {
        Toast.fail(msg, 2, null, false)
      }
    })
  }

  getAnalysis = () => {
    http.post(`${API.home}/sys/get_analysis`, {
      record_id: this.state.recordId,
    }).then(res => {
      const {code, msg, data} = res.data
      if (code === 200) {
        this.setState({
          analysis: data,
        });
      } else {
        Toast.fail(msg, 2, null, false)
      }
    })
  }

  render() {
    const {time, answer, analysis, recordId} = this.state
    return (
      <div className={'submit-answer'}>
        <HeaderBar title={'提交试卷'} arrow={true}/>
        <div className="content">
          <div className="cost">用时:
            <span>
              {
                !!time.d && <>{time.d}天</>
              }
              {
                !!time.h && <>{time.h && time.h.toString().padStart(2, '0')}:</>
              }
              {time.m.toString().padStart(2, '0')}:
              {time.s.toString().padStart(2, '0')}
            </span>
          </div>
          {
            analysis.length
              ? <>
                <ul className={'answers'}>
                  {
                    analysis.map((item, index) => {
                      const userSelectIndex = item.options.findIndex(item => item.user_select)
                      const rightAnswerIndex = item.options.findIndex(item => item.is_ans)
                      return <li key={item.id}
                                 className={classnames({
                                   correct: userSelectIndex === rightAnswerIndex,
                                   wrong: userSelectIndex >= 0 && userSelectIndex !== rightAnswerIndex,
                                   unselect: userSelectIndex < 0,
                                 })}>{index + 1}</li>
                    })
                  }
                </ul>
                {
                  !!analysis.length && <div className={'score'}>总分:{analysis[0].score}分</div>
                }
                <Link to={`/ai-test/analysis/${recordId}`}>
                  <button>查看解析</button>
                </Link>
              </>
              : <>
                <ul className={'answers'}>
                  {
                    answer && !!Object.keys(answer).length && Object.keys(answer).map((item, index) => {
                      return <li key={item} className={answer[item] ? 'selected' : ''}>{index + 1}</li>
                    })
                  }
                </ul>
                <button onClick={this.submit}>提交</button>
              </>
          }
        </div>
      </div>
    );
  }
}

export default SubmitAnswer;