import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/modules/asset_inventory_module/provider/asset_inventory_provider.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import '../../../extensions/text_extensions.dart';
import '../../../new_views/app_style/app_text_style.dart';

class LookUpAutoCompleteField extends StatefulWidget {
  final String initialValue;
  final String label;
  final num? assetId;
  final bool forAssetName;
  final bool  forSupplier;
  final bool clearAfterPick, isManufacturer;
  final Function(Lookup) onPick;
  final Function(String) onChanged;
   //need to pass directly url
  const LookUpAutoCompleteField(
      {Key? key,
      this.isManufacturer = false,
      required this.initialValue,
      required this.label,
      this.forAssetName = false,
      this.forSupplier = false,
      this.assetId,
      required this.onPick,
      this.clearAfterPick = true,
      required this.onChanged})
      : super(key: key);

  @override
  _AutoCompletePartsFieldState createState() => _AutoCompletePartsFieldState();
}

class _AutoCompletePartsFieldState extends State<LookUpAutoCompleteField> {
  AssetInventoryProvider? assetInventoryProvider;
  late TextEditingController _controller;

  @override
  void initState() {
    _controller = TextEditingController(text: widget.initialValue);
    super.initState();
  }

  @override
  void didUpdateWidget(covariant LookUpAutoCompleteField oldWidget) {
    if (widget.initialValue != oldWidget.initialValue) {
      _controller = TextEditingController(text: widget.initialValue);
    }
    super.didUpdateWidget(oldWidget);
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    assetInventoryProvider ??= Provider.of<AssetInventoryProvider>(context);
    final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(10));
    return Container(
      decoration: BoxDecoration(
        color: AppColor.background(context),
        borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
        //  boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
      ),
      child: Autocomplete<Lookup>(
        optionsBuilder: (TextEditingValue textEditingValue) async {
          if (textEditingValue.text.isEmpty) {
            return const Iterable<Lookup>.empty();
          }
          return (await assetInventoryProvider!.getAutoCompleteDetails(query: textEditingValue.text, isManufacturer: widget.isManufacturer, type: widget.forAssetName?1:widget.forSupplier?2:0));
        },
        displayStringForOption: (Lookup option) => option.name ?? "",
        fieldViewBuilder: (BuildContext context, TextEditingController fieldTextEditingController, FocusNode fieldFocusNode, VoidCallback onFieldSubmitted) {
          return TextField(
            controller: _controller,
            focusNode: fieldFocusNode,
            style: AppTextStyles.bodyText.copyWith(color: AppColor.black10),
            textAlign: TextAlign.start,
            decoration: InputDecoration(
              border: border,
              disabledBorder: border,
              focusedBorder: border,
              enabledBorder: border,
              errorBorder: border,
              contentPadding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: 16.toScreenWidth),
              constraints: const BoxConstraints(),
              suffixIconConstraints: const BoxConstraints(minWidth: 0),
              filled: true,
              fillColor: AppColor.fieldBgColor(context),
              errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60),
              floatingLabelStyle: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20),
              labelText: widget.label,
              labelStyle: AppTextStyles.tinyFont.copyWith(color: AppColor.textColor(context)),
            ),
            textInputAction: TextInputAction.search,
            onChanged: (text) {
              widget.onChanged(text);
              fieldTextEditingController.text = text;
            },
            onSubmitted: (String value) {
              onFieldSubmitted();
            },
          );
        },
        onSelected: (Lookup selection) {
          if (widget.clearAfterPick) {
            _controller.clear();
          } else {
            _controller.text = selection.name ?? '';
          }
          widget.onPick(selection);
        },
      ),
    );
  }
}
