using System;

public class HelloWorld {
  public static void Main(string[] args) {
    // autors: Ginta Varblāne
    // datums: 04.03.2025
    // 4. uzdevums
    // lietoju online programiz.com
    static string CapitalizeLetter(string text) {
      if (string.IsNullOrEmpty(text))
        return text;

      return char.ToUpper(text[0]) + text.Substring(1).ToLower();
    }
    string vards = "Ginta";
    string uzvards = "Varblane";

    // izvada tekstu ar string
    Console.WriteLine("Mans vards ir " + CapitalizeLetter(vards) +
                      " un taja ir " + vards.Length + " simboli");
    Console.WriteLine("Mans uzvards ir " + CapitalizeLetter(uzvards) +
                      " un taja ir " + uzvards.Length + " simboli");

    string uzvardsMazie = uzvards.ToLower();
    int vardaGarums = vards.Length;
    int uzvardaGarums = uzvards.Length;
    int kopaGarums = vardaGarums + uzvardaGarums;

    // Tabula
    // izveido atdalīšanās līniju katrai rindai, vārdu garumā
    string topLine = "+";
    for (int i = 0; i < vardaGarums + 1; i++) {
      topLine += "------+";
    }
    // pievieno līniju max, min, vid, sum
    topLine += "------+------+------+------+";

    // Izdrukā galvenes līniju
    Console.WriteLine(topLine);

    Console.Write("|   x  | ");
    // izvada burtus atsevišķi
    for (int i = 0; i < vardaGarums; i++) {
      // centrē vārda burtus
      Console.Write($"{CenterText(vards[i].ToString().ToUpper(), 5)}| ");
    }
    // pievieno max, min, vid un sum
    Console.WriteLine(
        $"{CenterText("max", 5)}| {CenterText("min", 5)}| {CenterText("vid", 5)}| {CenterText("sum", 5)}|");

    Console.WriteLine(topLine);

    // gadījuma skaitļi
    Random random = new Random();
    for (int i = 0; i < uzvardaGarums; i++) {
      // izvada uzvārda burti katrā kolonā
      Console.Write(
          $"| {CenterText(uzvardsMazie[i % uzvardsMazie.Length].ToString(), 5)}| ");

      // izvada gadījuma skaitļus
      int[] skaitli = new int[vardaGarums];
      for (int j = 0; j < vardaGarums; j++) {
        // aizpilda skaitļus, kas ir starp vārda garumu un kopējo garumu
        skaitli[j] = random.Next(vardaGarums, kopaGarums + 1);
        Console.Write($"{CenterText(skaitli[j].ToString(), 5)}| ");
      }

      // pievieno max, min, vid un sum
      int max = Max(skaitli);     // Atrod maksimālo vērtību
      int min = Min(skaitli);     // Atrod minimālo vērtību
      double vid = Vid(skaitli);  // Aprēķina vidējo
      int sum = Sum(skaitli);     // Aprēķina summu

      // izvada max, min, vid un sum
      Console.WriteLine(
          $"{CenterText(max.ToString(), 5)}| {CenterText(min.ToString(), 5)}| {CenterText(vid.ToString("F1"), 5)}| {CenterText(sum.ToString(), 5)}|");

      Console.WriteLine(topLine);
    }
  }

  // palīgfunkcijas max, min, vid un sum aprēķināšanai
  public static int Max(int[] arr) {
    // pieņem pirmo vērtību par maksimālo
    int max = arr[0];
    foreach (int num in arr) {
      // ja atrasts lielāks skaitlis, atjauno max
      if (num > max)
        max = num;
    }
    return max;
  }

  public static int Min(int[] arr) {
    // pieņem pirmo vērtību par minimālo
    int min = arr[0];
    foreach (int num in arr) {
      // ja atrasts mazāks skaitlis, atjauno min
      if (num < min)
        min = num;
    }
    return min;
  }

  public static double Vid(int[] arr) {
    double sum = 0;
    foreach (int num in arr) {
      // summē visus skaitļus
      sum += num;
    }
    return sum / arr.Length;
  }

  public static int Sum(int[] arr) {
    int sum = 0;
    foreach (int num in arr) {
      // summē visus skaitļus
      sum += num;
    }
    return sum;
  }

  // palīgfunkcija, kas centē tekstu
  public static string CenterText(string text, int totalWidth) {
    // aprēķina cik vietas jāpiepilda
    int spacesToPad = totalWidth - text.Length;
    // pabīz vietas pa kreisi
    int padLeft = spacesToPad / 2;
    // pabīž vietas pa labi
    int padRight = spacesToPad - padLeft;
    // atgriež tekstu ar atstarpēm no abām pusēm
    return text.PadLeft(text.Length + padLeft).PadRight(totalWidth);
  }
}
