// Copyright 2018 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.

#import "ios/web_view/internal/cwv_favicon_internal.h"

#import <UIKit/UIKit.h>

#import "net/base/mac/url_conversions.h"
#include "ui/gfx/geometry/size.h"
#include "url/gurl.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

namespace ios_web_view {
// Converts web::FaviconURL::IconType to CWVFaviconType.
CWVFaviconType ConvertIconTypeFromWebToCWV(web::FaviconURL::IconType iconType) {
  switch (iconType) {
    case web::FaviconURL::IconType::kInvalid:
      return CWVFaviconTypeInvalid;
    case web::FaviconURL::IconType::kFavicon:
      return CWVFaviconTypeFavicon;
    case web::FaviconURL::IconType::kTouchIcon:
      return CWVFaviconTypeTouchIcon;
    case web::FaviconURL::IconType::kTouchPrecomposedIcon:
      return CWVFaviconTypeTouchPrecomposedIcon;
    case web::FaviconURL::IconType::kWebManifestIcon:
      return CWVFaviconTypeWebManifestIcon;
  }
}
}  // namespace ios_web_view

@implementation CWVFavicon

@synthesize URL = _URL;
@synthesize type = _type;
@synthesize sizes = _sizes;

+ (NSArray<CWVFavicon*>*)faviconsFromFaviconURLs:
    (const std::vector<web::FaviconURL>&)faviconURLs {
  NSMutableArray<CWVFavicon*>* favicons = [NSMutableArray array];
  for (const auto& faviconURL : faviconURLs) {
    CWVFavicon* favicon = [[CWVFavicon alloc] initWithFaviconURL:faviconURL];
    [favicons addObject:favicon];
  }
  return [favicons copy];
}

- (instancetype)initWithFaviconURL:(web::FaviconURL)faviconURL {
  self = [super init];
  if (self) {
    _URL = net::NSURLWithGURL(faviconURL.icon_url);

    _type = ios_web_view::ConvertIconTypeFromWebToCWV(faviconURL.icon_type);

    NSMutableArray<NSValue*>* sizes = [NSMutableArray array];
    for (const auto& size : faviconURL.icon_sizes) {
      NSValue* value =
          [NSValue valueWithCGSize:CGSizeMake(size.width(), size.height())];
      [sizes addObject:value];
    }
    _sizes = [sizes copy];
  }
  return self;
}

@end
