import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';

import '../../../models/new_models/assistant_employee.dart';
import '../../../new_views/app_style/app_color.dart';

class AssistantEmployeeMenu extends StatefulWidget {
  final List<AssistantEmployees> statuses;
  final AssistantEmployees initialStatus;
  final Function(AssistantEmployees) onSelect;
  final String title;
  final bool enable;

  const AssistantEmployeeMenu({Key key, this.statuses, this.title, this.onSelect, this.initialStatus, this.enable = true}) : super(key: key);

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

class _SingleAssistantEmployeeMenuState extends State<AssistantEmployeeMenu> {
  AssistantEmployees _selectedStatus;

  @override
  void setState(VoidCallback fn) {
    if (mounted) super.setState(fn);
  }

  @override
  void didUpdateWidget(covariant AssistantEmployeeMenu oldWidget) {
    if (widget.initialStatus != null) {
      final result = widget.statuses?.where((element) {
        return element?.user?.id == widget.initialStatus?.user?.id;
      });
      if (result.isNotEmpty) {
        _selectedStatus = result.first;
      } else {
        _selectedStatus = null;
      }
      if ((widget.initialStatus?.user?.id ?? "") != (_selectedStatus?.user?.id ?? "")) {
        widget.onSelect(_selectedStatus);
      }
    } else {
      _selectedStatus = null;
    }
    super.didUpdateWidget(oldWidget);
  }

  @override
  void initState() {
    if (widget.initialStatus != null) {
      final result = widget.statuses?.where((element) {
        return element?.user?.id == widget.initialStatus?.user?.id;
      });
      if (result.isNotEmpty) _selectedStatus = result.first;
      if (widget.initialStatus?.user?.id != _selectedStatus?.user?.id) {
        widget.onSelect(_selectedStatus);
      }
    }

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 60.toScreenHeight,
      padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
      decoration: BoxDecoration(
        color: context.isDark ? AppColor.neutral50 : Colors.white,
        borderRadius: BorderRadius.circular(10),
        boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
      ),
      child: Stack(
        alignment: Alignment.center,
        children: [
          PositionedDirectional(
              end: 0,
              child: Icon(
                Icons.keyboard_arrow_down_rounded,
                color: widget.enable ? null : Colors.grey,
              )),
          Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              if (widget.title != null)
                Text(
                  widget.title,
                  style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500),
                ),
              DropdownButton<AssistantEmployees>(
                value: _selectedStatus,
                iconSize: 24,
                isDense: true,
                icon: const SizedBox.shrink(),
                elevation: 0,
                isExpanded: true,
                hint: Text(
                  context.translation.select,
                  style: Theme.of(context).textTheme.bodyLarge,
                ),
                style: TextStyle(color: Theme.of(context).primaryColor),
                underline: const SizedBox.shrink(),

                onChanged: widget.enable
                    ? (AssistantEmployees newValue) {
                        setState(() {
                          _selectedStatus = newValue;
                        });
                        widget.onSelect(newValue);
                      }
                    : null,

                // onChanged: (AssistantEmployees newValue) {
                //   setState(() {
                //     _selectedStatus = newValue;
                //   });
                //   widget.onSelect(newValue);
                // },
                items: widget.statuses.map<DropdownMenuItem<AssistantEmployees>>((AssistantEmployees value) {
                  return DropdownMenuItem<AssistantEmployees>(
                    value: value,
                    child: Text(
                      value.user?.name ?? "NULL",
                      style: Theme.of(context).textTheme.bodyLarge.copyWith(
                            color: widget.enable ? Theme.of(context).primaryColor : Colors.grey,
                          ),
                    ),
                  );
                }).toList(),
              ),
            ],
          ),
        ],
      ),
    );
  }
}
