import { PermissionStatus } from './Permissions.types';
export function coalesceStatuses(permissions) {
    const statuses = Object.keys(permissions).map(type => permissions[type].status);
    statuses.sort((status1, status2) => _getStatusWeight(status1) - _getStatusWeight(status2));
    // We choose the "heaviest" status with the most implications
    return statuses[statuses.length - 1];
}
function _getStatusWeight(status) {
    // In terms of weight, we treat UNDETERMINED > DENIED > GRANTED since UNDETERMINED requires the
    // most amount of further handling (prompting for permission and then checking that permission)
    // and GRANTED requires the least
    switch (status) {
        case PermissionStatus.GRANTED:
            return 0;
        case PermissionStatus.DENIED:
            return 1;
        case PermissionStatus.UNDETERMINED:
            return 2;
        default:
            return 100;
    }
}
export function coalesceExpirations(permissions) {
    const maxExpiration = 9007199254740991; // Number.MAX_SAFE_INTEGER
    const expirations = Object.keys(permissions).map(type => permissions[type].expires);
    expirations.sort((e1, e2) => (e1 == null || e1 === 'never' ? maxExpiration : e1) -
        (e2 == null || e2 === 'never' ? maxExpiration : e2));
    // We choose the earliest expiration
    return expirations[0];
}
//# sourceMappingURL=CoalescedPermissions.js.map