using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp_ZaawProgLab07 {
    public partial class Form1 : Form {
        Dictionary<string, int> ds = new Dictionary<string, int>();

        public Form1() {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e) {
            int przeczytaneSlowa = -1;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = Environment.CurrentDirectory;
            DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.

            string[] tablica = null;
            if (result == DialogResult.OK) // Test result.
            {
                string file = openFileDialog1.FileName;
                try {
                    string text = File.ReadAllText(file);
                    textBox1content.AppendText(text);
                    text = text.Replace(System.Environment.NewLine, " ");
                    tablica = text.Split(' ');
                    przeczytaneSlowa = text.Length;
                } catch (IOException) {
                }
            }

            textBox1content.SelectionStart = 0;
            /* Po załadowaniu tekstu w textBox, będzie on wyświetlać samą końcówkę
             * tekstu. Aby automatycznie przewinął się na sam początek potrzebna
             * jest powyższa instrukcja.
             */

            foreach (string word in tablica) {
                string tmp = word.ToLower();
                if (ds.ContainsKey(tmp)) {
                    ds[tmp] += 1;
                } else {
                    ds.Add(tmp, 1);
                }
            }

            textBox2stats.AppendText("Słów w pliku: " + przeczytaneSlowa + Environment.NewLine);
            textBox2stats.AppendText("Unikalne słowa: " + ds.Count + Environment.NewLine);
            textBox2stats.AppendText("" + result + Environment.NewLine);
            
            var items = from pair in ds orderby pair.Value descending select pair;

            // Display results.
            int counter = (int)numericUpDown1.Value;
            foreach (KeyValuePair<string, int> pair in items) {
                if ((counter--) == 0)
                    return;
                textBox2stats.AppendText("Słowo: " + NormalizeStr(pair.Key) +" Freq: "+ pair.Value + Environment.NewLine);
            }
        }

        private string NormalizeStr(string txt) {
            int size = txt.Length;
            if (size > 20)
                return txt;
            else {
                for(int i=20-size; i>0; i--) {
                    txt += " ";
                }
                return txt;
            }
        }

        private void button2_Click(object sender, EventArgs e) {
            string key = textBox1.Text;
            
            if (ds.Count == 0) {
                MessageBox.Show("Brak danych w kolekcji Dictionary.","Brak danych");
                return;
            }
                

            if(!ds.ContainsKey(key)) {
                MessageBox.Show("Słownik nie zawiera klucza: ["+key+"]",
                    "Nieprawidłowy klucz");
                return;
            } else {
                int val = -1;
                ds.TryGetValue(key, out val); //x zawiera wartosc spod indeksu 'doc'

                DialogResult resultDialog = MessageBox.Show("Klucz [" + key + "]"+Environment.NewLine+
                    "Value = "+val,
                    "Częstość słowa",
                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                if(resultDialog == DialogResult.Yes) {
                    MessageBox.Show("Wcisnąłeś przycisk YES","Yes");
                } else if (resultDialog == DialogResult.No) {
                    MessageBox.Show("Wcisnąłeś przycisk NO","No");
                } else {
                    MessageBox.Show("Wcisnąłeś przycisk CANCEL","Cancel");
                }
            }
            
        }
    }
}
