import 'package:flutter/material.dart';

import '../../app/constant.dart';

// login
class CustomTextFieldLogin extends StatelessWidget {
  final String hintText;
  final String labelText;
  final bool isPassword;
  final bool obscureText;
  final bool isMaxLine;
  final void Function()? onToggle;
  final TextEditingController? ctrl;
  final void Function(String)? onChange;
  final void Function(String)? onSubmitted;
  final void Function()? onTap;
  final void Function()? onEditingComplete;
  final FocusNode? focusNode;
  final bool isPrefix;

  final bool isError;
  final bool isTextArea;
  final bool isReadOnly;

  final bool hasFocus;

  const CustomTextFieldLogin(
      {Key? key,
      required this.hintText,
      required this.labelText,
      this.isPassword = false,
      this.isMaxLine = false,
      this.onToggle,
      this.obscureText = false,
      this.ctrl,
      this.onChange,
      this.onSubmitted,
      this.focusNode,
      this.isPrefix = false,
      this.isTextArea = false,
      this.isError = false,
      this.isReadOnly = false,
      this.hasFocus = false,
      this.onTap,
      this.onEditingComplete})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return TextField(
      autofocus: false,
      showCursor: (hasFocus) ? true : false,
      readOnly: isReadOnly,
      controller: ctrl,
      enableInteractiveSelection: false,
      style:
          Constant.body1(context: context).copyWith(color: Constant.textBlack),
      obscureText: obscureText,
      onChanged: onChange,
      onSubmitted: onSubmitted,
      onTap: onTap,
      onEditingComplete: onEditingComplete,
      focusNode: focusNode,
      maxLines: (isTextArea) ? 4 : 1,
      cursorColor: Constant.primaryBlue,
      decoration: InputDecoration(
        // fillColor: (hasFocus) ? Constant.primaryMain : Constant.textGrey,
        filled: true,
        focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(
              color: (hasFocus) ? Constant.primaryMain : Constant.textGrey,
              width: 2),
          borderRadius: BorderRadius.circular(8),
        ),
        enabledBorder: (hasFocus)
            ? OutlineInputBorder(
                // ignore: prefer_const_constructors
                borderRadius: BorderRadius.all(Radius.circular(8)),
                borderSide: BorderSide(
                  color: Constant.primaryMain,
                  width: 1,
                ),
              )
            : OutlineInputBorder(
                // ignore: prefer_const_constructors
                borderRadius: BorderRadius.all(Radius.circular(8)),
                borderSide: BorderSide(
                  color: Constant.textGrey,
                  width: 2,
                ),
              ),
        // hintStyle: Constant.body1_400(context: context)
        //     .copyWith(color: Constant.textBlack),
        // labelStyle: Constant.body3_400(context: context),
        hintStyle: Constant.body1(context: context).copyWith(
            color: (hasFocus) ? Constant.primaryMain : Constant.textGrey),
        // mainkan focus
        labelStyle: Constant.body1(context: context).copyWith(
            color: (hasFocus) ? Constant.primaryMain : Constant.textGrey),
        labelText: labelText,
        hintText: hintText,
        alignLabelWithHint: true,
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(30),
        ),
        prefixIcon: isPrefix ? const Icon(Icons.search) : null,
        prefixStyle: isPrefix ? Constant.body1(context: context) : null,
        suffixIcon: isPassword
            ? IconButton(
                alignment: Alignment.centerRight,
                onPressed: onToggle,
                icon: Icon(
                  Icons.remove_red_eye,
                  color: (hasFocus) ? Constant.primaryMain : Constant.textGrey,
                ),
                iconSize: Constant.getActualY(context: context, y: 24),
              )
            : null,
      ),
    );
  }
}

// selain inputan login
class CustomTextFieldInputan extends StatelessWidget {
  final String hintText;
  final String labelText;
  final bool isPassword;
  final bool obscureText;
  final bool isMaxLine;
  final void Function()? onToggle;
  final TextEditingController? ctrl;
  final void Function(String)? onChange;
  final void Function(String)? onSubmitted;
  final void Function()? onTap;
  final void Function()? onEditingComplete;
  final FocusNode? focusNode;
  final bool isPrefix;

  final bool isError;
  final bool isTextArea;
  final bool isReadOnly;

  final bool hasFocus;

  const CustomTextFieldInputan(
      {Key? key,
      required this.hintText,
      required this.labelText,
      this.isPassword = false,
      this.isMaxLine = false,
      this.onToggle,
      this.obscureText = false,
      this.ctrl,
      this.onChange,
      this.onSubmitted,
      this.focusNode,
      this.isPrefix = false,
      this.isTextArea = false,
      this.isError = false,
      this.isReadOnly = false,
      this.hasFocus = true,
      this.onTap,
      this.onEditingComplete})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return TextField(
      enabled: (isReadOnly == true) ? false : true,
      autofocus: false,
      showCursor: (hasFocus) ? true : false,
      readOnly: (isReadOnly == true) ? true : false,
      controller: ctrl,
      enableInteractiveSelection: false,
      style:
          Constant.body1(context: context).copyWith(color: Constant.textBlack),
      obscureText: obscureText,
      onChanged: onChange,
      onSubmitted: onSubmitted,
      onTap: (isReadOnly == true) ? null : onTap,
      onEditingComplete: onEditingComplete,
      focusNode: focusNode,
      maxLines: (isTextArea) ? 4 : 1,
      cursorColor: Constant.primaryBlue,
      decoration: InputDecoration(
        // fillColor: (hasFocus) ? Constant.primaryMain : Constant.textGrey,
        // filled: true,
        disabledBorder: OutlineInputBorder(
          // ignore: prefer_const_constructors
          borderRadius: BorderRadius.all(Radius.circular(8)),
          borderSide: BorderSide(
            color: Constant.textGrey,
            width: 1,
          ),
        ),
        focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Constant.primaryMain, width: 2),
          borderRadius: BorderRadius.circular(8),
        ),
        enabledBorder: (hasFocus)
            ? OutlineInputBorder(
                // ignore: prefer_const_constructors
                borderRadius: BorderRadius.all(Radius.circular(8)),
                borderSide: BorderSide(
                  color: Constant.primaryMain,
                  width: 1,
                ),
              )
            : OutlineInputBorder(
                // ignore: prefer_const_constructors
                borderRadius: BorderRadius.all(Radius.circular(8)),
                borderSide: BorderSide(
                  color: Constant.textGrey,
                  width: 1,
                ),
              ),
        // hintStyle: Constant.body1_400(context: context)
        //     .copyWith(color: Constant.textBlack),
        // labelStyle: Constant.body3_400(context: context),
        hintStyle: Constant.body1(context: context).copyWith(
            color: (hasFocus) ? Constant.primaryMain : Constant.textGrey),
        // mainkan focus
        labelStyle: Constant.body1(context: context).copyWith(
            color: (hasFocus) ? Constant.primaryMain : Constant.textGrey),
        labelText: labelText,
        hintText: hintText,
        alignLabelWithHint: true,
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(30),
        ),
        prefixIcon: isPrefix ? const Icon(Icons.document_scanner) : null,
        prefixStyle: isPrefix ? Constant.body1(context: context) : null,
        suffixIcon: isPassword
            ? IconButton(
                alignment: Alignment.centerRight,
                onPressed: onToggle,
                icon: Icon(
                  Icons.remove_red_eye,
                  color: (hasFocus) ? Constant.primaryMain : Constant.textGrey,
                ),
                iconSize: Constant.getActualY(context: context, y: 24),
              )
            : null,
      ),
    );
  }
}
