public bool SolveTicket(int ticketId, string solverName, string ticketTitle, string finalAnswer, string authorEmail)
        {
            string emailTitle   = "Ticket - #" + ticketId + " " + ticketTitle + " SOLVED";
            Ticket ticket       = ServerDatabaseHandler.GetTroubleTicket(ticketId);
            string emailMessage = "Your ticket: #" + ticketId + " - " + ticketTitle + "\nWith the problem description:\n" + ticket.description
                                  + "\n\nWas solved! The solver, " + solverName + ", left this final answer:\n\n" + finalAnswer;

            if (ServerDatabaseHandler.SolveTroubleTicket(ticketId, finalAnswer))
            {
                if (ServerDatabaseHandler.RemoveAllQuestions(ticketId))
                {
                    SendEmail(authorEmail, emailTitle, emailMessage);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
        //Testes
        public string DebugTests()
        {
            string msg = "<br>------------------ Debug: ------------------<br>";

            msg += "Testes:<br><br>";

            if (ServerDatabaseHandler.ClearDatabase())
            {
                msg += "BD limpa<br><br>";
            }
            else
            {
                msg += "ERRO a limpar BD<br><br>";
            }



            //##################  Workers  ##################
            msg += "<br>##################  Workers  ##################<br>";
            if (!ServerDatabaseHandler.IsWorkerRegistered("*****@*****.**"))
            {
                msg += "1: OK<br>";
            }
            else
            {
                msg += "1: ERROR<br>";
            }

            if (ServerDatabaseHandler.AddWorker("Nuno", "*****@*****.**"))
            {
                msg += "2: OK<br>";
            }
            else
            {
                msg += "2: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetWorker(1).name == "Nuno" && ServerDatabaseHandler.GetWorker("*****@*****.**").email == "*****@*****.**")
            {
                msg += "3: OK<br>";
            }
            else
            {
                msg += "3: ERROR<br>";
            }

            if (ServerDatabaseHandler.AddWorker("Nuno test2", "*****@*****.**"))
            {
                msg += "4: OK<br>";
            }
            else
            {
                msg += "4: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetWorker(2).name == "Nuno test2" && ServerDatabaseHandler.GetWorker("*****@*****.**").email == "*****@*****.**")
            {
                msg += "5: OK<br>";
            }
            else
            {
                msg += "5: ERROR<br>";
            }


            //##################  Solvers  ##################
            msg += "<br>##################  Solvers  ##################<br>";
            if (!ServerDatabaseHandler.IsSolverRegistered("solver1 Username"))
            {
                msg += "1: OK<br>";
            }
            else
            {
                msg += "1: ERROR<br>";
            }

            if (ServerDatabaseHandler.AddSolver("Solver1 Name", "solver1 Username", "pass123"))
            {
                msg += "2: OK<br>";
            }
            else
            {
                msg += "2: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetSolver(1).name == "Solver1 Name" && ServerDatabaseHandler.GetSolver("solver1 Username").username == "solver1 Username")
            {
                msg += "3: OK<br>";
            }
            else
            {
                msg += "3: ERROR<br>";
            }

            if (ServerDatabaseHandler.AddSolver("Solver2 Name", "solver2 Username", "pass123"))
            {
                msg += "4: OK<br>";
            }
            else
            {
                msg += "4: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetSolver(2).username == "solver2 Username" && ServerDatabaseHandler.GetSolver("solver2 Username").name == "Solver2 Name")
            {
                msg += "5: OK<br>";
            }
            else
            {
                msg += "5: ERROR<br>";
            }


            //##################  Tickets  ##################
            msg += "<br>##################  Tickets  ##################<br>";
            if (ServerDatabaseHandler.CreateTroubleTicket("Titulo do ticket 1", "descricao do problema do ticket 1", 1))
            {
                msg += "1: OK<br>";
            }
            else
            {
                msg += "1: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetTroubleTicket(1).solverId == -1 && ServerDatabaseHandler.GetTroubleTicket(1).workerId == 1 &&
                ServerDatabaseHandler.GetTroubleTicket(1).state == TicketState.UNASSIGNED &&
                ServerDatabaseHandler.GetTroubleTicket(1).title == "Titulo do ticket 1" &&
                ServerDatabaseHandler.GetTroubleTicket(1).answer == "" &&
                ServerDatabaseHandler.GetTroubleTicket(1).description == "descricao do problema do ticket 1")
            {
                msg += "2: OK<br>";
            }
            else
            {
                msg += "2: ERROR<br>";
            }

            if (ServerDatabaseHandler.UpdateTroubleTicketState(1, TicketState.ASSIGNED))
            {
                msg += "3: OK<br>";
            }
            else
            {
                msg += "3: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetTroubleTicket(1).state == TicketState.ASSIGNED)
            {
                msg += "4: OK<br>";
            }
            else
            {
                msg += "4: ERROR<br>";
            }

            if (ServerDatabaseHandler.UpdateTroubleTicketState(1, TicketState.SOLVED))
            {
                msg += "5: OK<br>";
            }
            else
            {
                msg += "5: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetTroubleTicket(1).state == TicketState.SOLVED)
            {
                msg += "6: OK<br>";
            }
            else
            {
                msg += "6: ERROR<br>";
            }

            if (ServerDatabaseHandler.UpdateTroubleTicketState(1, TicketState.WAITING_FOR_ANSWERS))
            {
                msg += "7: OK<br>";
            }
            else
            {
                msg += "7: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetTroubleTicket(1).state == TicketState.WAITING_FOR_ANSWERS)
            {
                msg += "8: OK<br>";
            }
            else
            {
                msg += "8: ERROR<br>";
            }

            if (ServerDatabaseHandler.UpdateTroubleTicketState(1, TicketState.UNASSIGNED))
            {
                msg += "9: OK<br>";
            }
            else
            {
                msg += "9: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetTroubleTicket(1).state == TicketState.UNASSIGNED)
            {
                msg += "10: OK<br>";
            }
            else
            {
                msg += "10: ERROR<br>";
            }

            if (ServerDatabaseHandler.AssignTroubleTicket(1, 1))
            {
                msg += "11: OK<br>";
            }
            else
            {
                msg += "11: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetTroubleTicket(1).state == TicketState.ASSIGNED && ServerDatabaseHandler.GetTroubleTicket(1).solverId == 1)
            {
                msg += "12: OK<br>";
            }
            else
            {
                msg += "12: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetSolverAssignedTroubleTickets(1).Count == 1 && ServerDatabaseHandler.GetSolverAssignedTroubleTickets(1)[0].title == "Titulo do ticket 1")
            {
                msg += "13: OK<br>";
            }
            else
            {
                msg += "13: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetAllUnassignedTroubleTickets() == null)
            {
                msg += "14: OK<br>";
            }
            else
            {
                msg += "14: ERROR<br>";
            }

            if (ServerDatabaseHandler.CreateTroubleTicket("T2", "des2", 1) && ServerDatabaseHandler.CreateTroubleTicket("T3", "des3", 1))
            {
                msg += "15: OK<br>";
            }
            else
            {
                msg += "15: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetAllUnassignedTroubleTickets().Count == 2 && ServerDatabaseHandler.GetAllUnassignedTroubleTickets()[1].title == "T3")
            {
                msg += "16: OK<br>";
            }
            else
            {
                msg += "16: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetWorkerTroubleTickets(2) == null &&
                ServerDatabaseHandler.GetWorkerTroubleTickets(1).Count == 3 &&
                ServerDatabaseHandler.GetWorkerTroubleTickets(1)[1].title == "T2")
            {
                msg += "17: OK<br>";
            }
            else
            {
                msg += "17: ERROR<br>";
            }

            if (ServerDatabaseHandler.SolveTroubleTicket(1, "resposta final dada"))
            {
                msg += "18: OK<br>";
            }
            else
            {
                msg += "18: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetTroubleTicket(1).answer == "resposta final dada" && ServerDatabaseHandler.GetTroubleTicket(1).state == TicketState.SOLVED)
            {
                msg += "19: OK<br>";
            }
            else
            {
                msg += "19: ERROR<br>";
            }


            //##################  Questions  ##################
            msg += "<br>##################  Questions  ##################<br>";
            if (ServerDatabaseHandler.AddQuestion("T1", "des1", 1, 1) != -1 && ServerDatabaseHandler.AddQuestion("T2", "des2", 1, 1) != -1)
            {
                msg += "1: OK<br>";
            }
            else
            {
                msg += "1: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetAllQuestions(1).Count == 2 &&
                ServerDatabaseHandler.GetAllQuestions(1)[1].title == "T2" &&
                ServerDatabaseHandler.GetAllQuestions(1)[1].isAnswered == false)
            {
                msg += "2: OK<br>";
            }
            else
            {
                msg += "2: ERROR<br>";
            }

            if (!ServerDatabaseHandler.IsAllQuestionsAnswered(1))
            {
                msg += "3: OK<br>";
            }
            else
            {
                msg += "3: ERROR<br>";
            }

            if (ServerDatabaseHandler.AnswerQuestion(1, "res1"))
            {
                msg += "4: OK<br>";
            }
            else
            {
                msg += "4: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetAllQuestions(1)[0].isAnswered == true && ServerDatabaseHandler.GetAllQuestions(1)[0].answer == "res1")
            {
                msg += "5: OK<br>";
            }
            else
            {
                msg += "5: ERROR<br>";
            }

            if (!ServerDatabaseHandler.RemoveAllQuestions(1))
            {
                msg += "6: OK<br>";
            }
            else
            {
                msg += "6: ERROR<br>";
            }

            if (ServerDatabaseHandler.AnswerQuestion(2, "res2")) //todas as questoes do ticket 1 estao respondidas a partir daqui
            {
                msg += "7: OK<br>";
            }
            else
            {
                msg += "7: ERROR<br>";
            }

            if (ServerDatabaseHandler.IsAllQuestionsAnswered(1))
            {
                msg += "8: OK<br>";
            }
            else
            {
                msg += "8: ERROR<br>";
            }

            if (ServerDatabaseHandler.RemoveAllQuestions(1))
            {
                msg += "9: OK<br>";
            }
            else
            {
                msg += "9: ERROR<br>";
            }

            if (ServerDatabaseHandler.GetAllQuestions(1) == null)
            {
                msg += "10: OK<br>";
            }
            else
            {
                msg += "10: ERROR<br>";
            }


            return(msg);
        }