/**
 * @license
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import 'polymer-resin/standalone/polymer-resin';

export type SafeTypeBridge = (
  value: unknown,
  type: string,
  fallback: unknown
) => unknown;

export type ReportHandler = (
  isDisallowedValue: boolean,
  printfFormatString: string,
  ...printfArgs: unknown[]
) => void;

declare global {
  interface Window {
    security: {
      polymer_resin: {
        SafeType: {
          CONSTANT: string;
          HTML: string;
          JAVASCRIPT: string;
          RESOURCE_URL: string;
          /** Unprivileged but possibly wrapped string. */
          STRING: string;
          STYLE: string;
          URL: string;
        };
        CONSOLE_LOGGING_REPORT_HANDLER: ReportHandler;
        install(options: {
          UNSAFE_passThruDisallowedValues?: boolean;
          allowedIdentifierPrefixes?: string[];
          reportHandler?: ReportHandler;
          safeTypesBridge?: SafeTypeBridge;
        }): void;
      };
    };
  }
}

const security = window.security;

export const _testOnly_defaultResinReportHandler =
  security.polymer_resin.CONSOLE_LOGGING_REPORT_HANDLER;

export function installPolymerResin(
  safeTypesBridge: SafeTypeBridge,
  reportHandler = security.polymer_resin.CONSOLE_LOGGING_REPORT_HANDLER
) {
  window.security.polymer_resin.install({
    allowedIdentifierPrefixes: [''],
    reportHandler,
    safeTypesBridge,
  });
}
