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

#include "ios/chrome/browser/ui/background_generator.h"

#import <QuartzCore/QuartzCore.h>
#include <stddef.h>

#include "base/mac/bundle_locations.h"
#include "base/mac/foundation_util.h"
#include "base/mac/scoped_cftyperef.h"
#import "ios/chrome/browser/ui/ui_util.h"

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

// This is a utility function that may be used as a standalone helper function
// to generate a radial gradient UIImage.
UIImage* GetRadialGradient(CGRect backgroundRect,
                           CGPoint centerPoint,
                           CGFloat radius,
                           CGFloat centerColor,
                           CGFloat outsideColor,
                           UIImage* tileImage,
                           UIImage* logoImage) {
  UIGraphicsBeginImageContextWithOptions(backgroundRect.size, YES, 0);
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGFloat gradient_colors[4] = {centerColor, 1.0, outsideColor, 1.0};
  const size_t kColorCount = 2;
  base::ScopedCFTypeRef<CGColorSpaceRef> grey_space(
      CGColorSpaceCreateDeviceGray());
  DCHECK_EQ(2u, CGColorSpaceGetNumberOfComponents(grey_space));
  base::ScopedCFTypeRef<CGGradientRef> gradient(
      CGGradientCreateWithColorComponents(grey_space, gradient_colors, nullptr,
                                          kColorCount));
  CGContextDrawRadialGradient(context, gradient, centerPoint, 0, centerPoint,
                              radius, kCGGradientDrawsAfterEndLocation);
  if (tileImage)
    [tileImage drawAsPatternInRect:backgroundRect];
  if (logoImage) {
    CGPoint corner = AlignPointToPixel(
        CGPointMake(centerPoint.x - logoImage.size.width / 2.0,
                    centerPoint.y - logoImage.size.height / 2.0));
    [logoImage drawAtPoint:corner];
  }
  UIImage* background = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return background;
}

void InstallBackgroundInView(UIView* view) {
  UIImageView* imageView = [[UIImageView alloc] initWithFrame:view.bounds];
  imageView.image = [UIImage imageNamed:@"stack_view_background_noise.jpg"];
  imageView.contentMode = UIViewContentModeScaleAspectFill;
  imageView.autoresizingMask =
      UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
  [view insertSubview:imageView atIndex:0];
}
