using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections;

namespace LINQ_to_Random
{
    class ŹródłoLiczbLosowych<T> : IEnumerable, IEnumerable<T>
    {
        int size = 0;

        public ŹródłoLiczbLosowych(int size)
        {
            if (size < 1) throw new Exception("Rozmiar musi być liczbą większą od zera");
            else this.size = size;
        }

        public IEnumerator<T> GetEnumerator()
        {                        
            return ((IEnumerable<T>)Execute()).GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return Execute().GetEnumerator();
        }

        public IEnumerable<T> Execute()
        {
            if (typeof(T) == typeof(double)) return (IEnumerable<T>)ExecuteDouble();
            if (typeof(T) == typeof(int)) return (IEnumerable<T>)ExecuteInt();
            
            throw new Exception("Parametry typu innego niż double nie są obsługiwane");
        }

        private List<double> ExecuteDouble()
        {
            Random random = new Random();
            List<double> lista = new List<double>(size);
            for (int i = 0; i < size; i++)
            {
                double liczba = random.NextDouble();
                lista.Add(liczba);
            }
            return lista;
        }

        private List<int> ExecuteInt()
        {
            Random random = new Random();
            List<int> lista = new List<int>(size);
            for (int i = 0; i < size; i++)
            {
                int liczba = random.Next();
                lista.Add(liczba);
            }
            return lista;
        }
    }
}
