import React from 'react';
import find from 'lodash/find';
import classnames from 'classnames';
import { useSelector, useDispatch } from 'react-redux';
import { updateRequestPaneTab } from 'providers/ReduxStore/slices/tabs';
import QueryParams from 'components/RequestPane/QueryParams';
import RequestHeaders from 'components/RequestPane/RequestHeaders';
import RequestBody from 'components/RequestPane/RequestBody';
import RequestBodyMode from 'components/RequestPane/RequestBody/RequestBodyMode';
import StyledWrapper from './StyledWrapper';

const HttpRequestPane = ({item, collection, leftPaneWidth}) => {
  const dispatch = useDispatch();
  const tabs = useSelector((state) => state.tabs.tabs);
  const activeTabUid = useSelector((state) => state.tabs.activeTabUid);

  const selectTab = (tab) => {
    dispatch(updateRequestPaneTab({
      uid: item.uid,
      requestPaneTab: tab
    }))
  };

  const getTabPanel = (tab) => {
    switch(tab) {
      case 'params': {
        return <QueryParams item={item} collection={collection}/>;
      }
      case 'body': {
        return <RequestBody item={item} collection={collection}/>;
      }
      case 'headers': {
        return <RequestHeaders item={item} collection={collection}/>;
      }
      default: {
        return <div className="mt-4">404 | Not found</div>;
      }
    }
  }

  if(!activeTabUid) {
    return (
      <div>Something went wrong</div>
    );
  }

  const focusedTab = find(tabs, (t) => t.uid === activeTabUid);
  if(!focusedTab || !focusedTab.uid || !focusedTab.requestPaneTab) {
    return (
      <div className="pb-4 px-4">An error occured!</div>
    );
  }

  const getTabClassname = (tabName) => {
    return classnames(`tab select-none ${tabName}`, {
      'active': tabName === focusedTab.requestPaneTab
    });
  };

  return (
    <StyledWrapper className="flex flex-col h-full relativ">
      <div className="flex items-center tabs" role="tablist">
        <div className={getTabClassname('params')} role="tab" onClick={() => selectTab('params')}>Params</div>
        <div className={getTabClassname('body')} role="tab" onClick={() => selectTab('body')}>Body</div>
        <div className={getTabClassname('headers')} role="tab" onClick={() => selectTab('headers')}>Headers</div>
        {/* Moved to post mvp */}
        {/* <div className={getTabClassname('auth')} role="tab" onClick={() => selectTab('auth')}>Auth</div> */}
        {focusedTab.requestPaneTab === 'body' ? (
          <div className="flex flex-grow justify-end items-center">
            <RequestBodyMode />
          </div>
        ) : null }
      </div>
      <section className="flex w-full mt-5">
        {getTabPanel(focusedTab.requestPaneTab)}
      </section>
    </StyledWrapper>
  )
};

export default HttpRequestPane;