import 'package:fis_i18n/i18n.dart';
import 'package:flutter/material.dart';
import 'package:fis_ui/index.dart';
import 'package:fis_ui/base_define/page.dart';
import 'package:fis_ui/values/font_sizes.dart';
import 'package:flyinsono/architecture/define.dart';
import 'package:flyinsono/rpc.dart';
import 'package:get/get.dart';
import 'package:fis_theme/theme.dart';

import '../index.dart';
import 'widgets.dart';

/// 摄像头检测
class CameraDetection extends GetView<HardwareDetectionController>
    implements FPage {
  final bool isdetection;
  CameraDetection({Key? key, this.isdetection = false}) : super(key: key);

  @override
  String get pageName => "device_detection";

  late TextStyle smallTitleStyle = TextStyle(
    fontSize: isdetection ? FFontSizes.H4 : FFontSizes.H6,
    height: 1,
  );

  /// 副标题行高：[摄像头]、[麦克风]、[扬声器]
  static const _subTitleRowHright = 30.0;

  @override
  Widget build(BuildContext context) {
    controller.state.detectingCamera = false;
    controller.state.isDisplayCameraWindow = false;
    return Row(
      children: [
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Container(
              width: 300,
              height: _subTitleRowHright,
              child: Row(
                children: [
                  Text(i18nBook.setting.camera.t, style: smallTitleStyle),
                  SizedBox(width: 10),
                  InkWell(
                    onTap: () async {
                      if (CartSystemPlatform.isCartSystemVersion) {
                        await rpc.platform.stopPreview();
                      }
                      await controller.refreshCameraList();
                    },
                    child: Icon(
                      Icons.refresh,
                      size: 24,
                    ),
                  ),
                  SizedBox(width: 10),
                  Obx(() {
                    if (controller.state.cameraAvailable == null)
                      return Container();
                    return controller.state.cameraAvailable!
                        ? CommonWidgets.deviceAvailableTip()
                        : CommonWidgets.deviceUnavailableTip();
                  }),
                ],
              ),
            ),
            FSizedBox(
              height: 13,
            ),
            _cameraSelector(),
          ],
        ),
        SizedBox(width: 20),
        FColumn(
          children: [
            FSizedBox(
              height: 13,
            ),
            DetectButton(
              deviceType: HardwareDeviceType.camera,
              subTitleRowHright: _subTitleRowHright,
            ),
          ],
        )
      ],
    );
  }

  /// 摄像头选择器
  Widget _cameraSelector() {
    return Obx(
      () {
        List<HardwareDevice> source = controller.state.cameraList;
        bool noCamera = source.isEmpty;
        if (controller.state.searchingCamera)
          return CommonWidgets.deviceFindingTip();
        return noCamera
            ? CommonWidgets.deviceNotFoundTip()
            : FSelect<HardwareDevice, String>(
                source: source,
                fontFamily: FTheme.ins.localeSetting.fontFamily,
                height: 30,
                width: 300,
                value: controller.state.currentCamera?.id,
                optionValueExtractor: (value) {
                  return value.id;
                },
                optionLabelExtractor: (value) {
                  return value.name;
                },
                onSelectChanged: (value, index) {
                  if (value == null) return;
                  controller.selectCameraById(value);
                },
                fontSize: isdetection ? FFontSizes.H4 : FFontSizes.H6,
              );
      },
    );
  }
}
