// @flow
import * as ICONS from 'constants/icons';
import React from 'react';
import Icon from 'component/common/icon';
import RewardLink from 'component/rewardLink';
import Button from 'component/button';
import Card from 'component/common/card';
import rewards from 'rewards';
import LbcMessage from 'component/common/lbc-message';

type Props = {
  openRewardCodeModal: () => void,
  openSetReferrerModal: () => void,
  reward: {
    id: string,
    reward_title: string,
    reward_amount: number,
    reward_range?: string,
    transaction_id: string,
    created_at: string,
    reward_description: string,
    reward_type: string,
    claim_code: string,
  },
  user: User,
  disabled: boolean,
};

const RewardTile = (props: Props) => {
  const { reward, openRewardCodeModal, openSetReferrerModal, user, disabled = false } = props;
  const referrerSet = user && user.invited_by_id;
  const claimed = !!reward.transaction_id;
  const customActionsRewards = [rewards.TYPE_REFERRAL, rewards.TYPE_REFEREE];

  return (
    <Card
      title={__(reward.reward_title)}
      subtitle={<LbcMessage>{reward.reward_description}</LbcMessage>}
      actions={
        <div className="section__actions">
          {reward.reward_type === rewards.TYPE_GENERATED_CODE && (
            <Button button="primary" onClick={openRewardCodeModal} label={__('Enter Code')} disabled={disabled} />
          )}
          {reward.reward_type === rewards.TYPE_REFERRAL && (
            <Button
              button="primary"
              navigate="/$/invite"
              label={__('Go To Invites')}
              aria-hidden={disabled}
              tabIndex={disabled ? -1 : 0}
            />
          )}
          {reward.reward_type === rewards.TYPE_REFEREE && (
            <>
              {referrerSet && <RewardLink button reward_type={reward.reward_type} disabled={disabled} />}
              <Button
                button={referrerSet ? 'link' : 'primary'}
                onClick={openSetReferrerModal}
                label={referrerSet ? __('Change Inviter') : __('Set Inviter')}
                disabled={disabled}
              />
            </>
          )}
          {!customActionsRewards.some((i) => i === reward.reward_type) &&
            (claimed ? (
              <span>
                <Icon icon={ICONS.COMPLETED} /> {__('Reward claimed.')}
              </span>
            ) : (
              <RewardLink button claim_code={reward.claim_code} disabled={disabled} />
            ))}
        </div>
      }
    />
  );
};

export default RewardTile;