// @flow
import React from 'react';
import Button from 'component/button';
import UriIndicator from 'component/uriIndicator';
import I18nMessage from 'component/i18nMessage';
import { formatLbryUrlForWeb } from 'util/url';
import { withRouter } from 'react-router';

type Props = {
  history: { push: string => void },
  nextRecommendedClaim: ?StreamClaim,
  nextRecommendedUri: string,
  setPlayingUri: (string | null) => void,
};

function AutoplayCountdown(props: Props) {
  const {
    nextRecommendedUri,
    nextRecommendedClaim,
    setPlayingUri,
    history: { push },
  } = props;
  const nextTitle = nextRecommendedClaim && nextRecommendedClaim.value && nextRecommendedClaim.value.title;
  const [timer, setTimer] = React.useState(5);
  const [timerCanceled, setTimerCanceled] = React.useState(false);

  let navigateUrl;
  if (nextTitle) {
    navigateUrl = formatLbryUrlForWeb(nextRecommendedUri);
  }

  React.useEffect(() => {
    let interval;
    if (!timerCanceled) {
      interval = setInterval(() => {
        const newTime = timer - 1;
        if (newTime === 0) {
          // Set the playingUri to null so the app doesn't try to make a floating window with the video that just finished
          setPlayingUri(null);
          push(navigateUrl);
        } else {
          setTimer(timer - 1);
        }
      }, 1000);
    }
    return () => {
      clearInterval(interval);
    };
  }, [timer, navigateUrl, push, timerCanceled, setPlayingUri, nextRecommendedUri]);

  if (timerCanceled) {
    return null;
  }

  return (
    <div className="video-overlay__wrapper">
      <div className="video-overlay__subtitle">
        <I18nMessage tokens={{ channel: <UriIndicator link uri={nextRecommendedUri} /> }}>
          Up Next by %channel%
        </I18nMessage>
      </div>
      <div className="video-overlay__title">{nextTitle}</div>

      <div className="video-overlay__actions">
        <div className="video-overlay__subtitle">
          {__('Playing in %seconds_left% seconds', { seconds_left: timer })}
        </div>
        <div className="section__actions--centered">
          <Button label={__('Cancel')} button="link" onClick={() => setTimerCanceled(true)} />
        </div>
      </div>
    </div>
  );
}

export default withRouter(AutoplayCountdown);
