using MultipleChoiceTrainer.Models.DataModels;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace MultipleChoiceTrainer.Validation
{
    public class NotEmptyChoiceCollectionAttribute : ValidationAttribute
    { 
        public NotEmptyChoiceCollectionAttribute()
        {

        }


        public override bool IsValid(object value)
        {
            ErrorMessage = "Es müssen mindestens zwei Antwortmöglichkeiten eingegeben werden!";

            if (value == null || !(value is ICollection<Choice> collection))
            {
                return false;
            }

            if(collection == null || collection.Where(e => !string.IsNullOrEmpty(e.Text)).Count() < 2)
            {
                return false;
            }

            if(!collection.Where(e => !string.IsNullOrEmpty(e.Text)).Any(e => e.IsTrue))
            {
                ErrorMessage = "Es muss mindestens eine richtige Antwort eingegeben werden!";
                return false;
            }

            return true;
        }

    }
}
