import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:prosappco/src/authentication/authentication_repository.dart';
import 'package:prosappco/src/components/photo_view.dart';
import 'package:prosappco/src/models/user_model.dart';
import 'package:prosappco/src/screens/calendar.dart';
import 'package:prosappco/src/screens/messages.dart';
import 'package:prosappco/src/screens/my_services_pro.dart';
import 'package:prosappco/src/screens/professional.dart';
import 'package:prosappco/src/screens/profile.dart';
import 'package:prosappco/src/screens/profile_pro.dart';
import 'package:prosappco/src/screens/profile_pro_web.dart';
import 'package:prosappco/src/screens/reputacion_pro.dart';
import '../models/scores_model.dart';
import '../screens/configuracion.dart';
import '../screens/support.dart';
import 'package:url_launcher/url_launcher.dart';

class DrawerProfessional extends StatefulWidget {
  @override
  State<DrawerProfessional> createState() => _DrawerProfessionalState();
}

class _DrawerProfessionalState extends State<DrawerProfessional> {
  final uid = AuthenticationRepository.instance.getCurrentUserUid();
  UserModel? user;
  ScoresModel? scoresModel;

  Future<void> _irSugerencias() async {
    const url =
        'https://admin.prosapp.co/sugerencias '; // Aquí debes poner la URL a la que quieres dirigirte
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'No se pudo abrir la URL $url';
    }
  }

  @override
  void initState() {
    super.initState();

    if (user == null) {
      UserModel.getUser(uid.toString()).then(
        (UserModel s) => setState(() => user = s),
      );
    }

    if (scoresModel == null) {
      ScoresModel.scoreTo(uid.toString(), true, false).then(
        (ScoresModel s) => setState(() => scoresModel = s),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    final User? currentUser = FirebaseAuth.instance.currentUser;

    return Drawer(
      child: Container(
        color: const Color(0xFFE9F9FF),
        child: Column(
          children: [
            Container(
              color: Colors.white,
              child: Column(
                children: [
                  ListTile(
                    onTap: () {
                      Navigator.push(
                        context,
                        CupertinoPageRoute(
                          builder: (BuildContext context) {
                            return const ProfileScreen();
                          },
                        ),
                      );
                    },
                    title: Text(user?.name ?? '',
                        style: const TextStyle(fontWeight: FontWeight.bold)),
                    subtitle: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Text(
                          currentUser?.phoneNumber ?? '',
                          style: const TextStyle(fontSize: 12),
                        ),
                        Text(
                          user?.city ?? '',
                          style: const TextStyle(fontSize: 12),
                        ),
                      ],
                    ),
                    leading: ReferencePhoto(
                      ref: user?.photo,
                      size: 55,
                      sizeCircle: 60,
                    ),
                    trailing: const Icon(Icons.keyboard_arrow_right,
                        color: Colors.black),
                    contentPadding: const EdgeInsets.symmetric(
                        vertical: 20, horizontal: 16),
                  ),
                ],
              ),
            ),
            Container(
              decoration: BoxDecoration(
                boxShadow: [
                  BoxShadow(
                    color: Colors.grey.withOpacity(0.3),
                    spreadRadius: 1,
                    blurRadius: 3,
                    offset: const Offset(0, 0), // changes position of shadow
                  ),
                ],
              ),
              child: Divider(
                height: 0,
                color: Colors.grey[300],
              ),
            ),
            Expanded(
              child: Column(
                children: [
                  ListTile(
                    onTap: () {
                      Navigator.of(context).push(
                        CupertinoPageRoute(
                          builder: (BuildContext context) {
                            return const MyServicesProScreen();
                          },
                        ),
                      );
                    },
                    leading: const Icon(
                      Icons.history,
                      color: Colors.black,
                    ),
                    title: const Text(
                      'Mis servicios',
                      style: TextStyle(fontSize: 15),
                    ),
                  ),
                  ListTile(
                    onTap: () {
                      Navigator.push(
                        context,
                        CupertinoPageRoute(
                          builder: (BuildContext context) {
                            if (kIsWeb) {
                              return const ProfileProWebScreen();
                            } else {
                              return const ProfileProScreen();
                            }
                          },
                        ),
                      );
                    },
                    leading: const Icon(
                      Icons.person_outline,
                      color: Colors.black,
                    ),
                    title: const Text(
                      'Perfil profesional',
                      style: TextStyle(fontSize: 15),
                    ),
                  ),
                  ListTile(
                    onTap: () {
                      Navigator.push(
                        context,
                        CupertinoPageRoute(
                          builder: (BuildContext context) {
                            return const ConfiguracionScreen();
                          },
                        ),
                      );
                    },
                    leading: const Icon(
                      Icons.construction_outlined,
                      color: Colors.black,
                    ),
                    title: const Text(
                      'Configuración',
                      style: TextStyle(fontSize: 15),
                    ),
                  ),
                  ListTile(
                    onTap: () {
                      Navigator.push(
                        context,
                        CupertinoPageRoute(
                          builder: (BuildContext context) {
                            return const SupportScreen();
                          },
                        ),
                      );
                    },
                    leading: const Icon(
                      Icons.question_mark_rounded,
                      color: Colors.black,
                    ),
                    title: const Text(
                      'Soporte',
                      style: TextStyle(fontSize: 15),
                    ),
                  ),
                  ListTile(
                    onTap: _irSugerencias,
                    leading: const Icon(
                      Icons.campaign_outlined,
                      color: Colors.black,
                    ),
                    title: const Text(
                      'Sugerencias',
                      style: TextStyle(fontSize: 15),
                    ),
                  ),
                  ListTile(
                    onTap: () {
                      Navigator.of(context).push(
                        CupertinoPageRoute(
                          builder: (BuildContext context) {
                            return const MessagesScreen();
                          },
                        ),
                      );
                    },
                    leading: const Icon(
                      Icons.messenger_outline,
                      color: Colors.black,
                    ),
                    title: const Text(
                      'Mensajes',
                      style: TextStyle(fontSize: 15),
                    ),
                  ),
                  ListTile(
                    onTap: () {
                      Navigator.push(
                        context,
                        CupertinoPageRoute(
                          builder: (BuildContext context) {
                            return const CalendarScreen();
                          },
                        ),
                      );
                    },
                    leading: const Icon(
                      Icons.calendar_month,
                      color: Colors.black,
                    ),
                    title: const Text(
                      'Calendario',
                      style: TextStyle(fontSize: 15),
                    ),
                  ),
                  Builder(builder: (BuildContext context) {
                    return Container(
                      color: const Color(0xFF2BA4EC),
                      child: ListTile(
                        onTap: () {
                          if (ModalRoute.of(context)?.settings.name !=
                              '/solicitud') {
                            Navigator.pushNamed(context, '/solicitud');
                          } else {
                            Scaffold.of(context).openEndDrawer();
                          }
                        },
                        trailing: const Icon(
                          Icons.keyboard_arrow_right,
                          color: Colors.white,
                        ),
                        title: const Text(
                          'Solicitudes',
                          style: TextStyle(
                              color: Colors.white,
                              fontSize: 17,
                              fontWeight: FontWeight.bold),
                        ),
                        contentPadding: const EdgeInsets.symmetric(
                            vertical: 5, horizontal: 16),
                      ),
                    );
                  }),
                  Container(
                    decoration: BoxDecoration(
                      boxShadow: [
                        BoxShadow(
                          color: Colors.grey.withOpacity(0.5),
                          spreadRadius: 2,
                          blurRadius: 3,
                          offset:
                              const Offset(0, 2), // changes position of shadow
                        ),
                      ],
                    ),
                    child: Container(
                      color: Colors.white,
                      child: ListTile(
                        onTap: () async {
                          Navigator.push(
                            context,
                            CupertinoPageRoute(
                              builder: (BuildContext context) {
                                return const ReputationProScreen();
                              },
                            ),
                          );
                        },
                        trailing: const Icon(Icons.keyboard_arrow_right,
                            color: Colors.black),
                        title: const Text(
                          'Reputación',
                          style: TextStyle(color: Colors.black),
                        ),
                        subtitle: Row(
                          children: [
                            RatingBar.builder(
                              initialRating: scoresModel?.average ?? 0,
                              minRating: 1,
                              direction: Axis.horizontal,
                              allowHalfRating: true,
                              itemCount: 5,
                              itemSize: 25,
                              maxRating: 5,
                              itemPadding:
                                  const EdgeInsets.symmetric(horizontal: 0),
                              itemBuilder: (context, _) => const Icon(
                                Icons.star,
                                color: Color(0xFF2BA4EC),
                              ),
                              onRatingUpdate: (rating) {},
                              ignoreGestures: true,
                            ),
                            const SizedBox(width: 5),
                            Text(
                                '(${scoresModel?.total.toString()})  ${scoresModel?.average.toStringAsFixed(1)}'),
                          ],
                        ),
                      ),
                    ),
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Text(
                        'Prosapp',
                        style: TextStyle(fontSize: 10, color: Colors.grey[700]),
                      ),
                      Padding(
                        padding:
                            const EdgeInsets.only(top: 7, left: 3, right: 3),
                        child: Text(
                          '®',
                          style:
                              TextStyle(fontSize: 25, color: Colors.grey[700]),
                        ),
                      ),
                      Text(
                        'todos los derechos reservados',
                        style: TextStyle(fontSize: 10, color: Colors.grey[700]),
                      ),
                    ],
                  ),
                ],
              ),
            ),
            Row(
              children: [
                const SizedBox(width: 10),
                ElevatedButton(
                  onPressed: () {
                    AuthenticationRepository.instance.logout(uid!);
                  },
                  style: ElevatedButton.styleFrom(
                    backgroundColor: Colors.white,
                    shape: const CircleBorder(),
                    elevation: 3,
                    minimumSize: const Size(45, 45),
                  ),
                  child: const Icon(
                    Icons.logout_outlined,
                    color: Colors.red,
                    size: 35,
                  ),
                ),
                const SizedBox(width: 5),
                ElevatedButton(
                  onPressed: () {
                    Navigator.pushReplacementNamed(context, '/servicio');
                  },
                  style: ElevatedButton.styleFrom(
                    backgroundColor: const Color(0xFF2BA4EC),
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(50),
                    ),
                    elevation: 0,
                    minimumSize: const Size(200, 45),
                  ),
                  child: const Text(
                    'Modo usuario',
                    style: TextStyle(
                      color: Colors.white,
                      fontSize: 15,
                    ),
                  ),
                ),
              ],
            ),
            const SizedBox(height: 10),
          ],
        ),
      ),
    );
  }
}
