﻿using System.Collections.Generic;
using KDG.DataObjectHandler.Validators;
using SpielGut.Data;

namespace SpielGut.Validators
{
    public static class CustomerValidator
   {
        private static Customer user;

        private static List<string> errorMessages;

        public static List<string> Validate(Customer userToValidate)
        {
            user = userToValidate;
            errorMessages = new List<string>();
            errorMessages.AddRange(FirstNameIsValid());
            errorMessages.AddRange(SurnameIsValid());
            errorMessages.AddRange(EmailIsValid());
            errorMessages.AddRange(PasswordIsValid());
            errorMessages.AddRange(AddressIsValid());
            errorMessages.AddRange(PhoneNumberIsValid());
            return errorMessages;
        }

        private static List<string> FirstNameIsValid()
        {
            var messages = new List<string>();
            if (!BaseValidator.StringHasValue(user.FirstName))
            {
                messages.Add("Das Feld Vorname muss ausgefüllt sein.");
            }
            if (!BaseValidator.StringIsInMaxLenght(user.FirstName, 40))
            {
                messages.Add("Das Feld Vorname darf maximal 40 Zeichen beinhalten.");
            }
            return messages;
        }

        private static List<string> SurnameIsValid()
        {
            var messages = new List<string>();
            if (!BaseValidator.StringHasValue(user.LastName))
            {
                messages.Add("Das Feld Nachname muss ausgefüllt sein.");
            }
            if (!BaseValidator.StringIsInMaxLenght(user.LastName, 40))
            {
                messages.Add("Das Feld Nachname darf maximal 40 Zeichen beinhalten.");
            }
            return messages;
        }
        private static List<string> EmailIsValid()
        {
            var messages = new List<string>();
            if (!BaseValidator.StringHasValue(user.Email))
            {
                messages.Add("Das Feld Email muss ausgefüllt sein.");
                if (!BaseValidator.StringIsEmail(user.Email))
                {
                    messages.Add("Das Feld Email beinhaltet keine gültige Email.");
                }
            }
            if (!BaseValidator.StringIsInMaxLenght(user.Email, 100))
            {
                messages.Add("Das Feld Email darf maximal 100 Zeichen beinhalten.");
            }
            return messages;
        }
        private static List<string> PasswordIsValid()
        {
            var messages = new List<string>();
            if (!BaseValidator.StringHasValue(user.Password))
            {
                messages.Add("Das Feld Passwort muss ausgefüllt sein.");
            }
            return messages;
        }
        private static List<string> AddressIsValid()
        {
            var messages = new List<string>();
            if (!BaseValidator.StringHasValue(user.Street))
            {
                messages.Add("Das Feld Strasse muss ausgefüllt sein.");
            }
            if (!BaseValidator.StringHasValue(user.City))
            {
                messages.Add("Das Feld Ort muss ausgefüllt sein.");
            }
            if (!BaseValidator.StringHasValue(user.ZipCode))
            {
                messages.Add("Das Feld Postleitzahl muss ausgefüllt sein.");
            }
            if (!BaseValidator.StringIsInMaxLenght(user.Street, 40))
            {
                messages.Add("Das Feld Strasse darf maximal 40 Zeichen beinhalten.");
            }
            if (!BaseValidator.StringIsInMaxLenght(user.City, 40))
            {
                messages.Add("Das Feld Ort darf maximal 40 Zeichen beinhalten.");
            }
            if (!BaseValidator.StringIsInMaxLenght(user.ZipCode, 4))
            {
                messages.Add("Das Feld Postleitzahl darf maximal 4 Zeichen beinhalten.");
            }
            if (!BaseValidator.StringIsNumeric(user.ZipCode))
            {
                messages.Add("Das Feld Postleitzahl darf nur Zahlen beinhalten.");
            }
            return messages;
        }
        private static List<string> PhoneNumberIsValid()
        {
            var messages = new List<string>();
            if (!BaseValidator.StringHasValue(user.Phonenumber))
            {
                messages.Add("Das Feld Telefonnummer muss ausgefüllt sein.");
            }
            if (!BaseValidator.StringIsInMaxLenght(user.Phonenumber, 40))
            {
                messages.Add("Das Feld Telefonnummer darf maximal 40 Zeichen beinhalten.");
            }
            return messages;
        }
    }
}
