// @flow
import * as React from 'react';
import * as ICONS from 'constants/icons';
import * as MODALS from 'constants/modal_types';
import { formatCredits } from 'lbry-redux';
import FileDetails from 'component/fileDetails';
import ClaimAuthor from 'component/claimAuthor';
import FileTitle from 'component/fileTitle';
import FileActions from 'component/fileActions';
import FileRenderInitiator from 'component/fileRenderInitiator';
import FileRenderInline from 'component/fileRenderInline';
import FileValues from 'component/fileValues';
import FileViewCount from 'component/fileViewCount';
import ClaimTags from 'component/claimTags';
import DateTime from 'component/dateTime';
import Button from 'component/button';
import LbcSymbol from 'component/common/lbc-symbol';
import classnames from 'classnames';

const EXPAND = {
  NONE: 'none',
  CREDIT_DETAILS: 'credit_details',
  FILE_DETAILS: 'file_details',
};

type Props = {
  uri: string,
  claim: ?StreamClaim,
  claimIsMine: boolean,
  doOpenModal: (id: string, {}) => void,
};

function PostViewer(props: Props) {
  const { uri, claim, claimIsMine, doOpenModal } = props;
  const [expand, setExpand] = React.useState(EXPAND.NONE);

  if (!claim) {
    return null;
  }

  const amount = parseFloat(claim.amount) + parseFloat(claim.meta.support_amount);
  const formattedAmount = formatCredits(amount, 2, true);
  const hasSupport = claim && claim.meta && claim.meta.support_amount && Number(claim.meta.support_amount) > 0;

  function handleExpand(newExpand) {
    if (expand === newExpand) {
      setExpand(EXPAND.NONE);
    } else {
      setExpand(newExpand);
    }
  }

  return (
    <div className="post">
      <FileTitle uri={uri} className="post__title">
        <span className="post__date">
          <DateTime uri={uri} show={DateTime.SHOW_DATE} />
        </span>
      </FileTitle>

      <div
        className={classnames('post__info', {
          'post__info--expanded': expand !== EXPAND.NONE,
        })}
      >
        <div className="post__info--grouped">
          <Button
            button="link"
            className="dim"
            icon={ICONS.INFO}
            aria-label={__('View claim details')}
            onClick={() => handleExpand(EXPAND.FILE_DETAILS)}
          />
          <Button button="link" className="dim" onClick={() => handleExpand(EXPAND.CREDIT_DETAILS)}>
            <LbcSymbol postfix={expand === EXPAND.CREDIT_DETAILS ? __('Hide') : formattedAmount} />
          </Button>
          {claimIsMine && hasSupport && (
            <Button
              button="link"
              className="expandable__button"
              icon={ICONS.UNLOCK}
              aria-label={__('Unlock tips')}
              onClick={() => {
                doOpenModal(MODALS.LIQUIDATE_SUPPORTS, { uri });
              }}
            />
          )}
        </div>
        <FileViewCount uri={uri} />
      </div>

      {expand === EXPAND.CREDIT_DETAILS && (
        <div className="section post__info--credit-details">
          <FileValues uri={uri} />
        </div>
      )}

      {expand === EXPAND.FILE_DETAILS && (
        <div className="section post__info--credit-details">
          <ClaimTags uri={uri} type="large" />
          <FileDetails uri={uri} />
        </div>
      )}

      <ClaimAuthor uri={uri} />

      <FileRenderInitiator uri={uri} />
      <FileRenderInline uri={uri} />
      <FileActions uri={uri} />
    </div>
  );
}

export default PostViewer;