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

#import "ios/web/js_messaging/page_script_util.h"

#import "base/apple/bundle_locations.h"
#import "base/strings/sys_string_conversions.h"

namespace web {

NSString* GetPageScript(NSString* script_file_name) {
  DCHECK(script_file_name);
  NSString* path =
      [base::apple::FrameworkBundle() pathForResource:script_file_name
                                               ofType:@"js"];
  DCHECK(path) << "Script file not found: "
               << base::SysNSStringToUTF8(script_file_name) << ".js";
  NSError* error = nil;
  NSString* content = [NSString stringWithContentsOfFile:path
                                                encoding:NSUTF8StringEncoding
                                                   error:&error];
  DCHECK(!error) << "Error fetching script: "
                 << base::SysNSStringToUTF8(error.description);
  DCHECK(content);
  return content;
}

NSString* MakeScriptInjectableOnce(NSString* script_identifier,
                                   NSString* script) {
  NSString* kOnceWrapperTemplate =
      @"if (typeof %@ === 'undefined') { var %@ = true; %%@ }";
  NSString* injected_var_name =
      [NSString stringWithFormat:@"_injected_%@", script_identifier];
  NSString* once_wrapper =
      [NSString stringWithFormat:kOnceWrapperTemplate, injected_var_name,
                                 injected_var_name];
  return [NSString stringWithFormat:once_wrapper, script];
}

NSString* MakeScriptPrivate(NSArray<NSString*>* filter, NSString* script) {
  CHECK(filter.count);
  NSMutableArray<NSString*>* conditions = [NSMutableArray array];
  for (NSString* origin in filter) {
    [conditions
        addObject:[NSString stringWithFormat:@"window.location.origin === '%@'",
                                             origin]];
  }
  NSString* conditionString = [conditions componentsJoinedByString:@" || "];
  return [NSString stringWithFormat:@"if (%@) { %@ }", conditionString, script];
}

}  // namespace web
