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

namespace Baza_Reklam
{
    public partial class AgentAddForm : Form
    {
        string starySymbol = string.Empty;
        ErrorProvider errProvider = new ErrorProvider();

        int agentId;

        public AgentAddForm(int idAgenta, int IdAgencji)
        {
            InitializeComponent();

            this.aGENCITableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            this.pLANY_PROWIZJITableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            this.pLANY_PROWIZJITableAdapter.Fill(this.sLOWNIKDataSet.PLANY_PROWIZJI);

            if (idAgenta == 0)
            {
                DataView table = (DataView)aGENCIBindingSource.List;
                DataRowView row = table.AddNew();
                row["id_agencji"] = IdAgencji;
                aGENCIBindingSource.EndEdit();
            }
            else
            {
                this.aGENCITableAdapter.FillByIdAgenta(this.sLOWNIKDataSet.AGENCI, idAgenta);
                agentId = idAgenta;
                symbolTextBox1.ReadOnly = true;
                f_ROZTextBox.ReadOnly = true;
            }
        }

        private void AgentAddForm_Load(object sender, EventArgs e)
        {
        }

        private void ZapiszButton_Click(object sender, EventArgs e)
        {
            if (ValidateChildren())
            {
                this.aGENCIBindingSource.EndEdit();
                this.aGENCITableAdapter.Update(this.sLOWNIKDataSet.AGENCI);
                MessageBox.Show("Zmiany zostały zapisane");
                this.DialogResult = DialogResult.OK;
            }
        }

        private void AnulujButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void imięTextBox_Validating(object sender, CancelEventArgs e)
        {
            IsTextBoxEmpty(imięTextBox, "Imię nie może być puste.", e);
        }

        private void nazwiskoTextBox_Validating(object sender, CancelEventArgs e)
        {
            IsTextBoxEmpty(nazwiskoTextBox, "Nazwisko nie może być puste.", e);
        }

        private void symbolTextBox1_Validating(object sender, CancelEventArgs e)
        {
            if(IsTextBoxEmpty(symbolTextBox1, "Symbol agenta nie może być pusty.", e)) return;
            
            StringBuilder errorMessage = new StringBuilder();
            if (!Utils.IsLoginUnique(symbolTextBox1.Text, agentId))
            {
                e.Cancel = true;
                errorMessage.Append("Symbol agenta musi być unikalny.");
            }
            else
                e.Cancel = false;

            errProvider.SetError((Control)sender, errorMessage.ToString());
        }

        private void f_ROZTextBox_Validating(object sender, CancelEventArgs e)
        {
            if (IsTextBoxEmpty(f_ROZTextBox, "Kod agenta nie może być pusty.", e)) return;
            
            StringBuilder errorMessage = new StringBuilder();
            if (f_ROZTextBox.Text.Length != 3)
            {
                e.Cancel = true;
                errProvider.SetError((Control)sender, "Kod powienien mieć 3 znaki.");
                return;
            }
            
            if (!Utils.tagAgentaUnikalny(f_ROZTextBox.Text, agentId))
            {
                e.Cancel = true;
                errProvider.SetError((Control)sender, "Kod powienien być unikalny.");
                return;
            }

            errProvider.SetError((Control)sender, "");
        }

        private bool IsTextBoxEmpty(TextBox txt, string message, CancelEventArgs e)
        {
            StringBuilder errorMessage = new StringBuilder();
            if (string.IsNullOrEmpty(txt.Text))
            {
                e.Cancel = true;
                errorMessage.Append(message);
            }
            else
                e.Cancel = false;
            errProvider.SetError(txt, errorMessage.ToString());
            return e.Cancel;
        }
    }
}