// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.notifications;

import android.os.RemoteException;

import org.chromium.base.Callback;
import org.chromium.base.Log;
import org.chromium.webapk.lib.client.WebApkServiceConnectionManager;
import org.chromium.webapk.lib.runtime_library.IWebApkApi;

/**
 * WebApkNotificationClient provides an API to display and close notifications remotely in
 * context of a WebAPK, enriching the notification with the WebAPK's small icon when available.
 */
public class WebApkNotificationClient {
    private static final String TAG = "cr_WebApk";

    // Callback which catches RemoteExceptions thrown due to IWebApkApi failure.
    private abstract static class ApiUseCallback implements Callback<IWebApkApi> {
        public abstract void useApi(IWebApkApi api) throws RemoteException;

        @Override
        public void onResult(IWebApkApi api) {
            try {
                useApi(api);
            } catch (RemoteException e) {
                Log.w(TAG, "WebApkAPI use failed.", e);
            }
        }
    }

    /**
     * Connect to a WebAPK's bound service, build a notification and hand it over to the WebAPK to
     * display. Handing over the notification makes the notification look like it originated from
     * the WebAPK - not Chrome - in the Android UI.
     */
    public static void notifyNotification(String webApkPackage,
            final NotificationBuilderBase notificationBuilder, final String platformTag,
            final int platformID) {
        final ApiUseCallback connectionCallback = new ApiUseCallback() {
            @Override
            public void useApi(IWebApkApi api) throws RemoteException {
                notificationBuilder.setSmallIcon(api.getSmallIconId());
                api.notifyNotification(platformTag, platformID, notificationBuilder.build());
            }
        };

        WebApkServiceConnectionManager.getInstance().connect(webApkPackage, connectionCallback);
    }

    /**
     * Cancel notification previously shown by WebAPK.
     */
    public static void cancelNotification(
            String webApkPackage, final String platformTag, final int platformID) {
        final ApiUseCallback connectionCallback = new ApiUseCallback() {
            @Override
            public void useApi(IWebApkApi api) throws RemoteException {
                api.cancelNotification(platformTag, platformID);
            }
        };
        WebApkServiceConnectionManager.getInstance().connect(webApkPackage, connectionCallback);
    }
}
