import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:sefer_driver/constant/box_name.dart';

class MyTextForm extends StatelessWidget {
  const MyTextForm({
    Key? key,
    required this.controller,
    required this.label,
    required this.hint,
    required this.type,
  }) : super(key: key);

  final TextEditingController controller;
  final String label, hint;
  final TextInputType type;

  @override
  Widget build(BuildContext context) {
    final theme = Theme.of(context);
    return Padding(
      padding: const EdgeInsets.only(bottom: 10),
      child: SizedBox(
        width: Get.width * .8,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              label.tr,
              style: theme.textTheme.bodyLarge?.copyWith(
                fontWeight: FontWeight.w600,
              ),
            ),
            const SizedBox(height: 8),
            CupertinoTextField(
              controller: controller,
              keyboardType: type,
              placeholder: hint.tr,
              padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
              decoration: BoxDecoration(
                color: theme.cardColor,
                border: Border.all(color: theme.dividerColor),
                borderRadius: BorderRadius.circular(8),
              ),
              style: theme.textTheme.bodyLarge,
              placeholderStyle: theme.textTheme.bodyMedium?.copyWith(
                color: theme.hintColor,
              ),
            ),
            const SizedBox(height: 4),
            ValueListenableBuilder<TextEditingValue>(
              valueListenable: controller,
              builder: (context, value, child) {
                String? errorText = _getErrorText(value.text);
                return errorText != null
                    ? Text(
                        errorText,
                        style: TextStyle(
                          color: theme.colorScheme.error,
                          fontSize: 12,
                        ),
                      )
                    : const SizedBox.shrink();
              },
            ),
          ],
        ),
      ),
    );
  }

  String? _getErrorText(String value) {
    if (value.isEmpty) {
      return '${'Please enter'.tr} $label'.tr;
    }

    if (type == TextInputType.emailAddress) {
      if (!value.contains('@')) {
        return 'Please enter a valid email.'.tr;
      }
    } else if (type == TextInputType.phone) {
      final box = GetStorage();
      if (box.read(BoxName.countryCode) == 'Egypt') {
        if (value.length != 11) {
          return 'Please enter a valid phone number.'.tr;
        }
      } else if (value.length != 10) {
        return 'Please enter a valid phone number.'.tr;
      }
    }

    return null;
  }
}
