// Copyright 2019 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 "ScreenBeforeFlutter.h"
#import "FlutterEngine+ScenariosTest.h"

@implementation ScreenBeforeFlutter

@synthesize engine = _engine;

- (id)initWithEngineRunCompletion:(void (^)(void))engineRunCompletion {
  self = [super init];
  _engine = [[FlutterEngine alloc] initWithScenario:@"poppable_screen"
                                     withCompletion:engineRunCompletion];
  return self;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  self.view.backgroundColor = UIColor.grayColor;

  UIButton* showFlutterButton = [UIButton buttonWithType:UIButtonTypeSystem];
  showFlutterButton.translatesAutoresizingMaskIntoConstraints = NO;
  showFlutterButton.backgroundColor = UIColor.blueColor;
  [showFlutterButton setTitle:@"Show Flutter" forState:UIControlStateNormal];
  showFlutterButton.tintColor = UIColor.whiteColor;
  showFlutterButton.clipsToBounds = YES;
  [showFlutterButton addTarget:self
                        action:@selector(showFlutter)
              forControlEvents:UIControlEventTouchUpInside];

  [self.view addSubview:showFlutterButton];
  [[showFlutterButton.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor] setActive:YES];
  [[showFlutterButton.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor] setActive:YES];
  [[showFlutterButton.heightAnchor constraintEqualToConstant:50] setActive:YES];
  [[showFlutterButton.widthAnchor constraintEqualToConstant:150] setActive:YES];

  [_engine runWithEntrypoint:nil];
}

- (FlutterViewController*)showFlutter {
  FlutterViewController* flutterVC = [[FlutterViewController alloc] initWithEngine:_engine
                                                                           nibName:nil
                                                                            bundle:nil];
  [self presentViewController:flutterVC animated:NO completion:nil];
  return flutterVC;
}

- (FlutterEngine*)engine {
  return _engine;
}

@end
