import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:turquessa_mesas_hoster/core/models/mesa_model.dart';
import 'package:turquessa_mesas_hoster/utils/widgets/custom_appbar.dart';
import 'package:turquessa_mesas_hoster/utils/widgets/custom_card.dart';
import 'package:turquessa_mesas_hoster/utils/widgets/get_status_style.dart';
import 'package:turquessa_mesas_hoster/utils/widgets/navigation_rail.dart';

import '../../../utils/widgets/ordenes_card.dart';
import '../../viewmodels/viewmodels.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

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

class Formulario extends State<HomeScreen> {
  int _selectedIndex = 0;
  @override
  void initState() {
    super.initState();
    final mesaViewModel = Provider.of<MesaViewModel>(context, listen: false);

    WidgetsBinding.instance.addPostFrameCallback((_) async {
      Provider.of<ProductoViewModel>(context, listen: false)
          .sincronizarProductosYCategorias();

      await mesaViewModel.sincronizarMesas();
      await mesaViewModel.fetchLocal();
    });
  }

  @override
  Widget build(BuildContext context) {
    final mesaViewModel = Provider.of<MesaViewModel>(context);
    final loginViewModel = Provider.of<LoginViewModel>(context);
    var _selectedIndex;
    return Scaffold(
      backgroundColor: Colors.grey.shade200,
      appBar: AppBar(
        title: const CustomAppbar(),
      ),
      body: Container(
        decoration: const BoxDecoration(
          gradient: LinearGradient(
            begin: Alignment.topCenter,
            end: Alignment.bottomCenter,
            colors: [
              Color(0xFFE0F7FA),
              Color(0xFFB2EBF2),
              Color(0xFF80DEEA),
              Color(0xFF4DD0E1),
            ],
          ),
        ),
        child: Row(
          children: [
            CustomNavigationRail(selectedIndex: _selectedIndex),
            Expanded(
              flex: 1,
              child: Center(
                child: Container(
                  decoration: const BoxDecoration(
                    color: Colors.white,
                  ),
                  child: GridView.builder(
                    gridDelegate:
                        const SliverGridDelegateWithFixedCrossAxisCount(
                      crossAxisCount: 3,
                      childAspectRatio: 1.0,
                      crossAxisSpacing: 10.0,
                      mainAxisSpacing: 10.0,
                    ),
                    padding: const EdgeInsets.all(10),
                    itemCount: mesaViewModel.mesas.length,
                    itemBuilder: (context, index) {
                      final mesa = mesaViewModel.mesas[index];
                      return GestureDetector(
                        onTap: () {
                          setState(() {
                            mesaViewModel.selectMesa(mesa);
                          });
                        },
                        child: TableCard(
                          mesa: mesa,
                        ),
                      );
                    },
                  ),
                ),
              ),
            ),
            if (mesaViewModel.selectedMesa != null)
              Expanded(
                  child: Container(
                margin: const EdgeInsets.symmetric(horizontal: 10),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.circular(10),
                  boxShadow: [
                    BoxShadow(
                      color: Colors.grey.withOpacity(0.2),
                      blurRadius: 5,
                      spreadRadius: 1,
                    )
                  ],
                ),
                child: TablaDetalles(
                    status: EstadoPedido.disponible,
                    table: mesaViewModel.selectedMesa ??
                        Mesa(
                            activa: false,
                            id: 0,
                            nombre: 'Mesa sin nombre',
                            estado: EstadoPedido.disponible)),
              )),
          ],
        ),
      ),
    );
  }
}

class TablaDetalles extends StatelessWidget {
  final Mesa table;
  final EstadoPedido status;

  const TablaDetalles({
    Key? key,
    required this.table,
    required this.status,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final mesaViewModel = Provider.of<MesaViewModel>(context, listen: true);
    final style = getStatusStyle(status);
    return Container(
      decoration: BoxDecoration(
        color: Color.fromARGB(255, 247, 249, 250),
        boxShadow: [
          BoxShadow(
            color: Colors.grey.withOpacity(0.2),
            blurRadius: 5,
            spreadRadius: 1,
          )
        ],
      ),
      child: Column(
        children: [
          // Header
          Container(
            padding: const EdgeInsets.all(16),
            decoration: BoxDecoration(
              color: style.iconColor,
            ),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Row(
                  children: [
                    const Icon(Icons.table_restaurant,
                        color: Colors.white, size: 24),
                    const SizedBox(width: 8),
                    Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Text(
                          table.nombre ?? 'Mesa sin nombre',
                          style: const TextStyle(
                            color: Colors.white,
                            fontSize: 20,
                            fontWeight: FontWeight.bold,
                          ),
                        ),
                        const Row(
                          crossAxisAlignment: CrossAxisAlignment.center,
                          mainAxisSize: MainAxisSize.min,
                          children: [
                            Icon(
                              Icons.access_time_rounded,
                              color: Colors.white70,
                              size: 16,
                            ),
                            Padding(
                              padding: EdgeInsets.only(left: 4),
                              child: Text(
                                "03:56",
                                style: TextStyle(
                                  fontSize: 14,
                                  color: Colors.white,
                                  fontWeight: FontWeight.normal,
                                ),
                              ),
                            ),
                          ],
                        )
                      ],
                    ),
                  ],
                ),
                Container(
                  padding:
                      const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
                  decoration: BoxDecoration(
                    color: Colors.white.withOpacity(0.2),
                    borderRadius: BorderRadius.circular(20),
                  ),
                  child: GestureDetector(
                    onTap: () {
                      mesaViewModel.cambiarEstadoPedidoMesa(style.nextStatus);
                    },
                    child: Text(table.activa! ? 'Activa' : 'Inactiva',
                        style: const TextStyle(
                          color: Colors.white,
                          fontWeight: FontWeight.bold,
                        )),
                  ),
                ),
              ],
            ),
          ),

          Expanded(
            child: SingleChildScrollView(
              child: Padding(
                padding: const EdgeInsets.symmetric(horizontal: 10),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Row(
                      children: [
                        // Text(
                        //   "Estatus: ${status.toString().split('.').last}",
                        //   style: const TextStyle(
                        //     fontWeight: FontWeight.bold,
                        //     color: Colors.black,
                        //   ),
                        // ),
                      ],
                    ),
                    // const SizedBox(height: 16),
                    // IconDataByStatus(status: status),
                    const SizedBox(height: 16),
                    Container(
                      padding: const EdgeInsets.all(16),
                      decoration: BoxDecoration(
                        color: Colors.white,
                        borderRadius: BorderRadius.circular(10),
                        border: Border.all(color: Colors.grey.shade200),
                      ),
                      child: Column(children: [
                        Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              const Text("Pedido Actual",
                                  style: TextStyle(
                                    fontWeight: FontWeight.bold,
                                    fontSize: 20,
                                    color: Colors.black,
                                  )),
                              GestureDetector(
                                onTap: () {
                                  Navigator.of(context)
                                      .pushNamed('creacion-pedido');
                                },
                                child: const Row(children: [
                                  Text("Ver detalle"),
                                  Icon(Icons.arrow_forward_ios_rounded),
                                ]),
                              )
                            ]),
                        const SizedBox(height: 10),
                        const CustomProductCard(
                          titulo: "Original Cheesse Meat burger with Chips",
                          precio: "15.20",
                          cantidad: 1,
                        ),
                        const SizedBox(height: 10),
                        const CustomProductCard(
                          titulo: "Original Cheesse Meat burger with Chips",
                          precio: "15.20",
                          cantidad: 1,
                        ),
                        const SizedBox(height: 10),
                        const CustomProductCard(
                          titulo: "Original Cheesse Meat burger with Chips",
                          precio: "15.20",
                          cantidad: 1,
                        ),
                        const SizedBox(height: 10),
                        const Divider(),
                        const Row(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
                          children: [
                            Text(
                              "Total",
                              style: TextStyle(
                                  fontSize: 20, fontWeight: FontWeight.bold),
                            ),
                            Text(
                              "\$45.60",
                              style: TextStyle(
                                  fontSize: 20, fontWeight: FontWeight.bold),
                            ),
                          ],
                        )
                      ]),
                    ),

                    //? const OrdenesScreen(),
                  ],
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

class TableCard extends StatelessWidget {
  final Mesa mesa;
  const TableCard({
    super.key,
    required this.mesa,
  });

  @override
  Widget build(BuildContext context) {
    final status = mesa.estado ?? EstadoPedido.disponible;
    final mesaViewModel = Provider.of<MesaViewModel>(context, listen: true);

    final style = getStatusStyle(status);

    return Card(
      borderOnForeground: false,
      color: style.cardColor,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          IconButton(
            onPressed: () {
              mesaViewModel.cambiarEstadoPedidoMesa(style.nextStatus);
              print('Cambiando estado de la mesa ${style.nextStatus}');
            },
            iconSize: 48,
            style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(style.backgroundColor),
            ),
            icon: Icon(style.icon, color: style.iconColor),
          ),
          const SizedBox(height: 8),
          Text(
            mesa.nombre ?? 'Mesa sin nombre',
            style: TextStyle(
              color: status == EstadoPedido.disponible
                  ? Colors.black
                  : Colors.black87,
              fontSize: 20,
              fontWeight: FontWeight.w500,
            ),
          ),
          Container(
            padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
            decoration: BoxDecoration(
              color: style.backgroundColor,
              borderRadius: BorderRadius.circular(20),
            ),
            child: Text(
              status.toString().split('.').last,
              style: TextStyle(
                color: style.iconColor,
                fontWeight: FontWeight.bold,
              ),
            ),
          )
        ],
      ),
    );
  }
}
