/*
Veidoja: Fedosova Elizaveta
Grupa: 110
Praktiskais darbs 6.3
Izmantotais Compiler: www.onlinegdb.com
*/

using System;
using System.Collections.Generic;

namespace PR63
{
class Program
{
// Zāles konfigurācija: 6 rindas ar atšķirīgu vietu skaitu
// 0 = Brīva, 1 = Rezervēta
static int[][] vietas =
{
new int[] {0,0,0,0,0,0,0}, // 6. rinda (7 vietas)
new int[] {0,0,0,0,0,0}, // 5. rinda (6 vietas)
new int[] {0,0,0,0,0,0,0,0}, // 4. rinda (8 vietas)
new int[] {0,0,0,0,0,0}, // 3. rinda (6 vietas)
new int[] {0,0,0,0,0,0,0}, // 2. rinda (7 vietas)
new int[] {0,0,0,0,0,0,0,0} // 1. rinda (8 vietas)

};

static List<(int rinda, int vieta)> rezervacijas = new List<(int, int)>();

static void ParaditZali()
{
Console.WriteLine("Zāle:");
for (int r = 0; r < vietas.Length; r++) {
for (int e = 0; e < vietas[r].Length; e++) {
Console.Write(vietas[r][e] + " "); //nevajag izmantot WriteLine
}
Console.WriteLine();
}

}

static bool RezervetVietu()
{

Console.WriteLine("Ievadiet rindas numuru: ");
int rinda = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Ievadiet vietas numuru: ");
int kolonna = Convert.ToInt32(Console.ReadLine());

int r = vietas.Length - rinda;
int e = kolonna - 1; //jo vietas ievades minimāla vērtība ir nevis 0, bet 1

if (r <= 0 || r > vietas.Length || e <= 0 || e > vietas[r].Length) { //nedrīkst būt r = 0, jo tapat būs indexOutOfRange
    Console.WriteLine("Nepareizā ievade!");
return false; //jo ir static bool
}
if (vietas[r][e] == 1) {
    Console.WriteLine("Vieta jau aizņemta!");
return false;
}
else {
    vietas[r][e] = 1;
    rezervacijas.Add((rinda, kolonna));
    Console.WriteLine("Veiksmīgi rezervēts!");
return true;
}

}

static void ParaditRezervacijas()
{
    if (rezervacijas.Count == 0) 
    {
        Console.WriteLine("Neviena vieta neaizņemta.");
    }
        
    foreach (var rez in rezervacijas) //int rez nestradās, jo ERR nevar konvertēt (int, int) to int
    {
        Console.WriteLine($"Vieta {rez.rinda} rindā, {rez.vieta} vietā ir rezervēta.");
    }

}

static void ApstradatIzveli()
{
bool iziet = false;

while (!iziet){ //iziet == false

Console.WriteLine("Ievadiet vēlamo darbību!");
Console.WriteLine("Parādīt zāli - '1'");
Console.WriteLine("Rezervēt vietu - '2'");
Console.WriteLine("Parādīt rezervāciju sarakstu - '3'");
Console.WriteLine("Iziet - '4'");
int iev = Convert.ToInt32(Console.ReadLine());

switch(iev)
{
case 1:
ParaditZali();
break; //nevar return, jo tas izmet no metodes
case 2:
RezervetVietu();
break;
case 3:
ParaditRezervacijas();
break;
case 4:
iziet = true;
break;
default:
Console.WriteLine("Nepareiza komanda!");
break;
}
}
}

static void Main(string[] args)
{
ApstradatIzveli();
}
}
}
