import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_field_error.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import '../app_texts_widget.dart';

class AppTextFieldCustom extends StatefulWidget {
  final double height;
  final Function onClick;
  final String hintText;
  final TextEditingController controller;
  final bool isTextFieldHasSuffix;
  final bool hasBorder;
  final String dropDownText;
  final IconButton suffixIcon;
  final Color dropDownColor;
  final bool enabled;
  final TextInputType inputType;
  final int minLines;
  final int maxLines;
  final List<TextInputFormatter> inputFormatters;
  final Function(String) onChanged;
  final String validationError;

  AppTextFieldCustom({
    this.height = 0,
    this.onClick,
    this.hintText,
    this.controller,
    this.hasBorder = true,
    this.isTextFieldHasSuffix = false,
    this.dropDownText,
    this.suffixIcon,
    this.dropDownColor,
    this.enabled = true,
    this.inputType = TextInputType.text,
    this.minLines = 1,
    this.maxLines = 1,
    this.inputFormatters,
    this.onChanged,
    this.validationError,
  });

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

class _AppTextFieldCustomState extends State<AppTextFieldCustom> {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Container(
          height: widget.height != 0 ? widget.height + 8 : null,
          decoration: widget.hasBorder
              ? TextFieldsUtils.containerBorderDecoration(
                  Color(0Xffffffff),
                  widget.validationError == null
                      ? Color(0xFFEFEFEF)
                      : Colors.red.shade700)
              : null,
          padding:
              EdgeInsets.only(top: 4.0, bottom: 4.0, left: 8.0, right: 8.0),
          child: InkWell(
            onTap: widget.onClick ?? null,
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Expanded(
                  child: Container(
                    padding: widget.dropDownText == null
                        ? EdgeInsets.symmetric(vertical: 0)
                        : EdgeInsets.symmetric(vertical: 8),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        if ((widget.controller != null &&
                                widget.controller.text != "") ||
                            widget.dropDownText != null)
                          AppText(
                            widget.hintText,
                            fontFamily: 'Poppins',
                            fontSize: SizeConfig.textMultiplier * 1.4,
                            fontWeight: FontWeight.w700,
                          ),
                        widget.dropDownText == null
                            ? TextField(
                                textAlign: TextAlign.left,
                                decoration:
                                    TextFieldsUtils.textFieldSelectorDecoration(
                                        widget.hintText, null, true),
                                style: TextStyle(
                                  fontSize: SizeConfig.textMultiplier * 1.7,
                                  fontFamily: 'Poppins',
                                  color: Colors.grey.shade800,
                                ),
                                controller: widget.controller,
                                keyboardType: widget.inputType,
                                enabled: widget.enabled,
                                minLines: widget.minLines,
                                maxLines: widget.maxLines,
                                inputFormatters: widget.inputFormatters != null
                                    ? widget.inputFormatters
                                    : [],
                                onChanged: (value) {
                                  if (widget.onChanged != null) {
                                    widget.onChanged(value);
                                    setState(() {});
                                  }
                                },
                              )
                            : AppText(
                                widget.dropDownText,
                                fontFamily: 'Poppins',
                                color: Colors.grey.shade800,
                                fontSize: SizeConfig.textMultiplier * 1.7,
                              ),
                      ],
                    ),
                  ),
                ),
                widget.isTextFieldHasSuffix
                    ? widget.suffixIcon != null
                        ? widget.suffixIcon
                        : InkWell(
                            child: Icon(
                              Icons.keyboard_arrow_down,
                              color: widget.dropDownColor != null
                                  ? widget.dropDownColor
                                  : Colors.black,
                            ),
                          )
                    : Container(),
              ],
            ),
          ),
        ),
        if (widget.validationError != null)
          TextFieldsError(error: widget.validationError),
      ],
    );
  }
}
