import React from 'react';
import { FormattedMessage as Message } from 'react-intl';
import icons from 'app/components/ui/icons.scss';
import { PanelBodyHeader } from 'app/components/ui/Panel';
import BaseAuthBody from 'app/components/auth/BaseAuthBody';

import styles from './permissions.scss';
import messages from './Permissions.intl.json';

export default class PermissionsBody extends BaseAuthBody {
    static displayName = 'PermissionsBody';
    static panelId = 'permissions';

    render() {
        const { user } = this.context;
        const { scopes } = this.context.auth;

        return (
            <div>
                {this.renderErrors()}

                <PanelBodyHeader>
                    <div className={styles.authInfo}>
                        <div className={styles.authInfoAvatar}>
                            {user.avatar ? <img src={user.avatar} /> : <span className={icons.user} />}
                        </div>
                        <div className={styles.authInfoTitle}>
                            <Message {...messages.youAuthorizedAs} />
                        </div>
                        <div className={styles.authInfoEmail}>{user.username}</div>
                    </div>
                </PanelBodyHeader>
                <div className={styles.permissionsContainer}>
                    <div className={styles.permissionsTitle}>
                        <Message {...messages.theAppNeedsAccess1} />
                        <br />
                        <Message {...messages.theAppNeedsAccess2} />
                    </div>
                    <ul className={styles.permissionsList}>
                        {scopes.map((scope) => {
                            const key = `scope_${scope}`;
                            const message = messages[key];

                            return (
                                <li key={key}>
                                    {message ? (
                                        <Message {...message} />
                                    ) : (
                                        scope.replace(/^\w|_/g, (match) => match.replace('_', ' ').toUpperCase())
                                    )}
                                </li>
                            );
                        })}
                    </ul>
                </div>
            </div>
        );
    }
}
