import React, { useEffect } from 'react'
import { Layout, Row, Col } from 'antd'
import { useSelector, useDispatch } from 'react-redux'
import {
  onChangeRegistrationField,
  onChangeSubscriptionField,
  onAddSubscription,
  onRemoveSubscription,
  getAllStates,
  fetchDistricts,
  registerSubscription,
  resetRegisterForm,
  updateRegistrationFormErrors,
} from '../actions/index'

import RegistrationStep from './landing/RegistrationStep';
import RegistrationForm from './landing/RegistrationForm';
import { isSmallDevice, landingPageSteps, validateRegistrationPayload } from '../../common/utils'

const Landing = () => {
  const dispatch = useDispatch();
  useEffect(() => {
    dispatch(getAllStates())
  }, [dispatch])
  const registration = useSelector((state) => state.base.registration)
  const isSmall = isSmallDevice();
  return (
    <Row className={`${isSmall ? '' : 'margin-double--left'} padding--sides width-100 height-100`}>
      <Col md={10} sm={24} push={isSmall ? 0 : 14}>
        {
          isSmall ?
          <div>
            <div className={'margin-double--top title-style center'}>VaccinePost</div>
            <div className={'subtitle-style center'}>A Cowin Vaccination Notification System</div>
          </div> :
          null
        }
        <RegistrationForm
          onChangeRegistrationField={(changedField) => dispatch(onChangeRegistrationField(changedField))}
          onChangeSubscriptionField={(changedField, index) => dispatch(onChangeSubscriptionField(changedField, index))}
          onAddSubscription={() => dispatch(onAddSubscription())}
          onRemoveSubscription={(index) => dispatch(onRemoveSubscription(index))}
          fetchDistricts={(stateId, index) => dispatch(fetchDistricts(stateId, index))}
          registration={registration}
          registerSubscription={() => {
            const validationParams = validateRegistrationPayload(registration)
            if(validationParams.isValid) {
              dispatch(registerSubscription(registration))
            }
            else {
              dispatch(updateRegistrationFormErrors(validationParams.errors))
            }
          }}
          resetRegisterForm={() => dispatch(resetRegisterForm())}
        />
      </Col>
      <Col md={14} sm={24} pull={isSmall ? 0 : 10}>
      {
        !isSmall ?
        <Layout className={'web-content background-white'}>
          <div>
            <div className={'margin-double--top title-style'}>VaccinePost</div>
            <div className={'subtitle-style'}>A Co-WIN Vaccination Notification System</div>
          </div>
        </Layout>
        :
        null
      }
      <Col className={`${isSmall ? "no-background" : "no-background web-steps"}`} md={14} sm={24} >
        <Row className='margin--bottom'>
        {
          landingPageSteps.map((step, index) => {
            return (
              <RegistrationStep
                key={index} 
                {...step}
              />
            )
          })
        }
        </Row>
      </Col>
      </Col>
    </Row>
  )
}

export default Landing