import { render, screen, waitFor } from '@testing-library/react'
import { FluidType, TimeStep } from 'enums'
import React from 'react'
import { Provider } from 'react-redux'
import { graphData } from 'tests/__mocks__/chartData.mock'
import { createMockEcolyoStore, mockChartState } from 'tests/__mocks__/store'
import TotalConsumption from './TotalConsumption'

const mockChartStore = createMockEcolyoStore({
  chart: {
    ...mockChartState,
    currentDatachart: graphData,
  },
})

describe('TotalConsumption component', () => {
  it('should be rendered correctly and render euro value', async () => {
    const { container } = render(
      <Provider store={mockChartStore}>
        <TotalConsumption fluidType={FluidType.ELECTRICITY} />
      </Provider>
    )
    await waitFor(() => null, { container })
    expect(container).toMatchSnapshot()
    expect(screen.getByText('32,92')).toBeInTheDocument()
  })

  it('should format multifluid value', async () => {
    const { container } = render(
      <Provider store={mockChartStore}>
        <TotalConsumption fluidType={FluidType.MULTIFLUID} />
      </Provider>
    )
    await waitFor(() => null, { container })
    expect(screen.getByText('130,84')).toBeInTheDocument()
  })
  it('should format multifluid value AND compared value', async () => {
    const store = createMockEcolyoStore({
      chart: {
        ...mockChartState,
        currentDatachart: graphData,
        showCompare: true,
        currentTimeStep: TimeStep.DAY,
      },
    })
    const { container } = render(
      <Provider store={store}>
        <TotalConsumption fluidType={FluidType.MULTIFLUID} />
      </Provider>
    )
    await waitFor(() => null, { container })
    expect(screen.getByText('130,84')).toBeInTheDocument()
    expect(screen.getByText('110,66')).toBeInTheDocument()
  })
  it('should display ----- when half an hour electricity data is not activated', async () => {
    const store = createMockEcolyoStore()
    const { container } = render(
      <Provider store={store}>
        <TotalConsumption fluidType={FluidType.ELECTRICITY} />
      </Provider>
    )
    await waitFor(() => null, { container })
    expect(screen.getByText('-----')).toBeInTheDocument()
  })
})