import React from 'react'
import PropTypes from 'prop-types'
import {HorizontalBar} from 'react-chartjs-2'

import colors from '../../../styles/colors'

const sidepClassesAge = {
  90: 'plus de 90 ans',
  89: '80-89 ans',
  79: '70-79 ans',
  69: '60-69 ans',
  59: '50-59 ans',
  49: '40-49 ans',
  39: '30-39 ans',
  29: '20-29 ans',
  19: '10-19 ans',
  '09': '0-9 ans'
}

const troisLabosClassesAge = {
  E: '75 et plus',
  D: '65-74 ans',
  C: '45-64 ans',
  B: '15-44 ans',
  A: 'moins de 15 ans'
}

const options = {
  scales: {
    yAxes: [{
      stacked: true
    }],
    xAxes: [{
      stacked: true
    }]
  }
}

function getValue(report, key, classeAge) {
  if (!report[key]) {
    return 0
  }

  const item = report[key].find(i => i.age === classeAge)
  return item ? item.value : 0
}

const formatData = report => {
  const classesAge = report.date < '2020-05-13' ? troisLabosClassesAge : sidepClassesAge

  const datasets = [
    {
      label: 'testés positifs',
      data: Object.keys(classesAge).sort().map(classe => getValue(report, 'testsPositifsDetails', classe)),
      backgroundColor: colors.red,
      stack: 'main'
    },
    {
      label: 'testés négatifs',
      data: Object.keys(classesAge).sort().map(classe => getValue(report, 'testsRealisesDetails', classe) - getValue(report, 'testsPositifsDetails', classe)),
      backgroundColor: colors.lightGrey,
      stack: 'main'
    }
  ]

  return {
    labels: Object.keys(classesAge).sort().map(classe => classesAge[classe]),
    datasets
  }
}

const CovidTestsAgeChart = ({report}) => {
  return (
    <HorizontalBar data={formatData(report)} options={options} />
  )
}

CovidTestsAgeChart.propTypes = {
  report: PropTypes.object.isRequired
}

export default CovidTestsAgeChart