﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VrniNti
{
    class Nti
    {
        static T VrniNtiElement<T>(T[] tabela, int n)
        {
            if (n < 0) n = tabela.Length + n + 1; // edini veljavni neg. indeksi so med -1 in -tabela.Length
            // ali je morebiti popravljen n v ustreznih mejah
            int indeks = n - 1;
            if ((0 <= indeks) && (indeks < tabela.Length))
            {
                return tabela[indeks];
            }
            else 
            {
                throw new ArgumentException($"Elementa z indeksom {indeks} ni v tabeli");
            }
        }

        static void Main(string[] args)
        {
            string[] blebetanje = { "bla", "blo", "bli" };
            int[] tja = { 10, 20, 30 };

            try
            {
                string niz1 = VrniNtiElement(blebetanje, 2); // dobimo "blo"
                Console.WriteLine($"Dobimo {niz1} pričakovano: blo");
            }
            catch
            {
                Console.WriteLine("Prišlo je do napake pri prvem testu!");
            }
            try
            {
                string niz2 = VrniNtiElement(blebetanje, -3); // dobimo "bla"
                Console.WriteLine($"Dobimo {niz2} pričakovano: bla");
            }
            catch
            {
                Console.WriteLine("Prišlo je do napake pri drugem testu!");
            }
            try
            {
                string niz3 = VrniNtiElement(blebetanje, -4); // sproži se  izjema
                Console.WriteLine("NAPAKA: moralo bi priti do izjeme!");
            }
            catch
            {
                Console.WriteLine("Klic VrniNtiElement(blebetanje, -4) je res sprožil izjemo");
            }
            int tam = VrniNtiElement(tja, 1); // dobimo 10
            Console.WriteLine($"Dobimo {tam} pričakovano: 10");
            try
            {
                int tu = VrniNtiElement(tja, 0); // sproži se izjema
                Console.WriteLine("NAPAKA: ob klicu VrniNtiElement(tja, 0) bi moralo priti do izjeme!");
            }
            catch
            {
                Console.WriteLine("PRAV: ob klicu VrniNtiElement(tja, 0) je prišlo do izjeme!");
            }
            try
            {
                int tuk = VrniNtiElement(tja, 4); // sproži se izjema
                Console.WriteLine("NAPAKA: ob klicu VrniNtiElement(tja, 4) bi moralo priti do izjeme!");
            }
            catch
            {
                Console.WriteLine("PRAV: ob klicu VrniNtiElement(tja, 4) je prišlo do izjeme!");
            }          
        }
    }
}
