using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace Ders_Zili
{
	public partial class AnaForm : Form
	{
		#region Değişkenler & Nesneler
		enum Durum
		{
			Beklemede,
			Ders,
			Ara
		}

		Durum durum = Durum.Beklemede;
		int kalanZaman = 0;
		System.Media.SoundPlayer müzikÇalar;
		RegistryKey kayıtAnahtarı;
		#endregion

		#region Metodlar
		private void göster()
		{
			ShowInTaskbar = true;
			Show();
			WindowState = FormWindowState.Normal;
		}

		private void gizle()
		{
			ShowInTaskbar = false;
			Hide();
			WindowState = FormWindowState.Minimized;
		}

		private bool uygulamaBaşlangıçListesindeMi()
		{
			bool sonuç = true;
			kayıtAnahtarı = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
			string değer = (string)kayıtAnahtarı.GetValue("Ders Zili", null);
			kayıtAnahtarı.Close();
			if (değer == null || değer != Application.ExecutablePath + " -gizli")
			{
				sonuç = false;
			}
			return sonuç;
		}

		private void uygulamayıBaşlangıçListesineEkle()
		{
			if (!uygulamaBaşlangıçListesindeMi())
			{
				kayıtAnahtarı = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
				kayıtAnahtarı.SetValue("Ders Zili", Application.ExecutablePath + " -gizli", RegistryValueKind.String);
				kayıtAnahtarı.Close();
				MessageBox.Show("Uygulama başlangıç listesine eklendi.", "Ders Zili", MessageBoxButtons.OK, MessageBoxIcon.Information);
			}
			else
			{
				MessageBox.Show("Uygulama zaten başlangıç listesinde.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
			}
		}

		public void başlat(bool gizliMi)
		{
			if (gizliMi)
			{
				gizle();
			}
			durum = Durum.Ders;
			kalanZaman = (int)dersSüresi.Value * 60;
			süreyiGöster(kalanZaman / 3600, (kalanZaman / 60) - ((kalanZaman / 3600) * 60), kalanZaman % 60);
			zamanlayıcı.Start();
			başla.Enabled = false;
		}

		private void zilÇal(string metin, int süre)
		{
			müzikÇalar = new System.Media.SoundPlayer(Kaynaklar.Zil);
			müzikÇalar.Play();
			simge.BalloonTipText = metin;
			simge.ShowBalloonTip(süre * 1000);
			if (durum == Durum.Ders)
			{
				durum = Durum.Ara;
				kalanZaman = (int)araSüresi.Value * 60;
			}
			else if (durum == Durum.Ara)
			{
				durum = Durum.Ders;
				kalanZaman = (int)dersSüresi.Value * 60;
			}
		}

		private void herŞeyiSıfırla()
		{
			durum = Durum.Beklemede;
			dersSüresi.Value = 45;
			araSüresi.Value = 15;
			zamanlayıcı.Stop();
			süre.Text = durum.ToString();
			başla.Enabled = true;
		}

		private void süreyiGöster(int saat, int dakika, int saniye)
		{
			string sonuç = "";

			if (saat >= 0 && saat < 100)
			{
				if (saat < 10)
				{
					sonuç += "0" + saat;
				}
				else
				{
					sonuç += saat;
				}
			}
			else
			{
				sonuç += "00";
			}

			sonuç += ":";

			if (dakika >= 0 && dakika < 60)
			{
				if (dakika < 10)
				{
					sonuç += "0" + dakika;
				}
				else
				{
					sonuç += dakika;
				}
			}
			else
			{
				sonuç += "00";
			}

			sonuç += ":";

			if (saniye >= 0 && saniye < 60)
			{
				if (saniye < 10)
				{
					sonuç += "0" + saniye;
				}
				else
				{
					sonuç += saniye;
				}
			}
			else
			{
				sonuç += "00";
			}

			süre.Text = sonuç;
		}
		#endregion

		#region Olaylar
		private void simge_MouseDoubleClick(object sender, MouseEventArgs e)
		{
			göster();
		}

		private void menü_göster_Click(object sender, EventArgs e)
		{
			göster();
		}

		private void menü_çıkış_Click(object sender, EventArgs e)
		{
			DialogResult sonuç = MessageBox.Show("Sayaç çalışıyor.\n\nÇıkmak istediğimizden emin misniz?", "Çıkış", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
			if (sonuç == System.Windows.Forms.DialogResult.Yes)
			{
				simge.Dispose();
				Application.Exit();
			}
		}

		private void AnaForm_FormClosing(object sender, FormClosingEventArgs e)
		{
			if (durum != Durum.Beklemede)
			{
				if (WindowState == FormWindowState.Normal)
				{
					e.Cancel = true;
					gizle();
				}
				else if (WindowState == FormWindowState.Minimized)
				{
					e.Cancel = false;
				}
			}
			else
			{
				simge.Dispose();
			}
		}

		private void zamanlayıcı_Tick(object sender, EventArgs e)
		{
			kalanZaman--;
			süreyiGöster(kalanZaman / 3600, (kalanZaman / 60) - ((kalanZaman / 3600) * 60), kalanZaman % 60);
			if (kalanZaman == 0)
			{
				if (durum == Durum.Ders)
				{
					zilÇal("Ders bitti! Ara zamanı.", 5);
				}
				else if (durum == Durum.Ara)
				{
					zilÇal("Ara bitti! Ders zamanı.", 5);
				}
			}
		}

		private void başla_Click(object sender, EventArgs e)
		{
			başlat(false);
		}

		private void sıfırla_Click(object sender, EventArgs e)
		{
			herŞeyiSıfırla();
		}

		private void uygulamayıBaşlangıcaEkle_Click(object sender, EventArgs e)
		{
			uygulamayıBaşlangıçListesineEkle();
		}

		private void link_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
		{
			System.Diagnostics.Process.Start("http://mehmetakiftutuncu.blogspot.com");
		}
		#endregion

		public AnaForm(bool gizliMi)
		{
			InitializeComponent();
			herŞeyiSıfırla();
			if (gizliMi)
			{
				başlat(true);
			}
		}

        private void AnaForm_Load(object sender, EventArgs e)
        {

        }
	}
}