// 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 'package:camera/new/camera.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:camera/new/src/camera_testing.dart';
import 'package:camera/new/src/common/native_texture.dart';

void main() {
  group('Camera', () {
    final List<MethodCall> log = <MethodCall>[];

    setUpAll(() {
      CameraTesting.channel
          .setMockMethodCallHandler((MethodCall methodCall) async {
        log.add(methodCall);
        switch (methodCall.method) {
          case 'NativeTexture#allocate':
            return 15;
        }

        throw ArgumentError.value(
          methodCall.method,
          'methodCall.method',
          'No method found for',
        );
      });
    });

    setUp(() {
      log.clear();
      CameraTesting.nextHandle = 0;
    });

    group('$CameraController', () {
      test('Initializing a second controller closes the first', () {
        final MockCameraDescription description = MockCameraDescription();
        final MockCameraConfigurator configurator = MockCameraConfigurator();

        final CameraController controller1 =
            CameraController.customConfigurator(
          description: description,
          configurator: configurator,
        );

        controller1.initialize();

        final CameraController controller2 =
            CameraController.customConfigurator(
          description: description,
          configurator: configurator,
        );

        controller2.initialize();

        expect(
          () => controller1.start(),
          throwsA(isInstanceOf<AssertionError>()),
        );

        expect(
          () => controller1.stop(),
          throwsA(isInstanceOf<AssertionError>()),
        );

        expect(controller1.isDisposed, isTrue);
      });
    });

    group('$NativeTexture', () {
      test('allocate', () async {
        final NativeTexture texture = await NativeTexture.allocate();

        expect(texture.textureId, 15);
        expect(log, <Matcher>[
          isMethodCall(
            '$NativeTexture#allocate',
            arguments: <String, dynamic>{'textureHandle': 0},
          )
        ]);
      });
    });
  });
}

class MockCameraDescription extends CameraDescription {
  @override
  LensDirection get direction => LensDirection.unknown;

  @override
  String get name => 'none';
}

class MockCameraConfigurator extends CameraConfigurator {
  @override
  Future<int> addPreviewTexture() => Future<int>.value(7);

  @override
  Future<void> dispose() => Future<void>.value();

  @override
  Future<void> initialize() => Future<void>.value();

  @override
  int get previewTextureId => 7;

  @override
  Future<void> start() => Future<void>.value();

  @override
  Future<void> stop() => Future<void>.value();
}
