import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:rrispat_app/src/features/auth/domains/models/auth_model.dart';
import 'package:rrispat_app/src/shared/shared_views.dart';
import 'package:rrispat_app/src/shared/widgets/rr_header.dart';

import '../../controllers/auth_controller.dart';

class AddUserWidget extends ConsumerStatefulWidget {
  const AddUserWidget({super.key});
  @override
  ConsumerState<ConsumerStatefulWidget> createState() => _AddUserPageState();
}

class _AddUserPageState extends ConsumerState<AddUserWidget> {
  TextEditingController phoneNumberController = TextEditingController();
  TextEditingController fullNameController = TextEditingController();
  final _gKey = GlobalKey<FormState>();
  String code = "";

  AuthModel authModel = AuthModel(
    uid: "",
    fcmToken: "",
    phoneNumber: "",
    fullName: "",
    division: "",
    department: "",
    isActive: true,
    isDefaultPin: true,
    isSuperAdmin: false,
    devices: const [],
    deviceHistory: const [],
    apps: const [],
    createdAt: DateTime.now(),
    updatedAt: DateTime.now(),
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: const RRHeader(),
      body: Padding(
        padding: const EdgeInsets.all(5.0),
        child: Form(
          key: _gKey,
          child: ListView(
            children: [
              const SizedBox(
                height: 10,
              ),
              fullNameWidget(),
              const SizedBox(
                height: 10,
              ),
              phoneWidget(),
              FilledButton(
                onPressed: () {
                  if (_gKey.currentState!.validate()) {
                    createUser(
                      context,
                      authModel.copyWith(
                        fullName: fullNameController.text,
                        phoneNumber: code + phoneNumberController.text,
                      ),
                    );
                  }
                },
                child: const Text("Submit"),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Widget fullNameWidget() {
    return TextFormField(
      controller: fullNameController,
      keyboardType: TextInputType.text,
      style: Theme.of(context).textTheme.titleMedium,
      textCapitalization: TextCapitalization.words,
      decoration: InputDecoration(
        hintText: "Enter Full Name",
        label: const Text("Full Name"),
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(10),
        ),
      ),
      validator: (value) {
        if (value == null || value.isEmpty) {
          return "Enter Full Name";
        }
        return null;
      },
    );
  }

  Widget phoneWidget() {
    return TextFormField(
      controller: phoneNumberController,
      keyboardType: TextInputType.phone,
      maxLength: 10,
      style: Theme.of(context).textTheme.titleMedium,
      decoration: InputDecoration(
        prefix: const Text("+91"),
        hintText: "Enter Phone Number",
        label: const Text("Phone Number"),
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(10),
        ),
      ),
      validator: (value) {
        if (value == null || value.isEmpty) {
          return "Enter a valid PhoneNumber";
        } else if (value.length < 10) {
          return "Phone Number length must be 10";
        }
        return null;
      },
    );
  }

  Future<void> createUser(BuildContext context, AuthModel auth) async {
    return showDialog(
      context: context,
      builder: (context) {
        return AlertDialog(
          title: Text("Confirm User",
              style: Theme.of(context).textTheme.titleLarge),
          content: SizedBox(
            height: 100,
            child: Column(
              children: [
                const SizedBox(
                  height: 10,
                ),
                Table(
                  children: [
                    TableRow(children: [
                      TableCell(
                          child: Text("Full Name",
                              style: Theme.of(context).textTheme.labelLarge)),
                      TableCell(
                          child: Text(auth.fullName,
                              style: Theme.of(context).textTheme.bodyMedium)),
                    ]),
                    TableRow(children: [
                      TableCell(
                          child: Text("Phone Number",
                              style: Theme.of(context).textTheme.labelLarge)),
                      TableCell(
                          child: Text(auth.phoneNumber,
                              style: Theme.of(context).textTheme.bodyMedium)),
                    ]),
                  ],
                ),
                const SizedBox(
                  height: 30,
                ),
              ],
            ),
          ),
          actions: [
            OutlinedButton(
                onPressed: () {
                  context.pop(true);
                },
                child: Text("Cancel",
                    style: Theme.of(context).textTheme.titleMedium)),
            ElevatedButton(
                onPressed: () {
                  ref.read(authControllerProvider).createUser(ref, auth);
                  context.goNamed(HomeView.routeName);
                },
                child: Text("Confirm",
                    style: Theme.of(context).textTheme.titleMedium))
          ],
        );
      },
    );
  }
}