// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import React from 'react';
import PropTypes from 'prop-types';
import {intlShape} from 'react-intl';
import {Text} from 'react-native';
import moment from 'moment-timezone';

export default class FormattedTime extends React.PureComponent {
    static propTypes = {
        value: PropTypes.any.isRequired,
        timeZone: PropTypes.string,
        children: PropTypes.func,
        hour12: PropTypes.bool,
    };

    static contextTypes = {
        intl: intlShape.isRequired,
    };

    getFormattedTime = () => {
        const {intl} = this.context;

        const {
            value,
            timeZone,
            hour12,
        } = this.props;

        if (timeZone) {
            const format = hour12 ? 'hh:mm A' : 'HH:mm';
            return moment.tz(value, timeZone).format(format);
        }

        // If no timezone is defined fallback to the previous implementation
        return intl.formatDate(new Date(value), {
            hour: 'numeric',
            minute: 'numeric',
            hour12,
        });
    };

    render() {
        const {children} = this.props;
        const formattedTime = this.getFormattedTime();

        if (typeof children === 'function') {
            return children(formattedTime);
        }

        return <Text>{formattedTime}</Text>;
    }
}
