using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using MercatorApi;
using MercatorController;
using System.IO;
using MercatorUi;
using System.Windows.Forms;
using System.Drawing;

namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {
        public static void Exec(MovableButton clickedButton)
        {
            Forms.Sig.SigForm sigForm = (Forms.Sig.SigForm)clickedButton.Form;
            string reqSql = "select s_id,s_image from STOCK where (s_image<>'')";
            if (!string.IsNullOrWhiteSpace(sigForm.Filter))
                reqSql += " and (" + sigForm.Filter + ")";
            List<(string s_id, string s_image)> list = Api.Zselect<(string s_id, string s_image)>(Globals.RepData, reqSql);
            if (list != null)
            {
                using (MercatorSqlConnection conn = new MercatorSqlConnection(Globals.RepData, true))
                {
                    if (conn.Connection == null)
                        return;

                    Progress.ProgressCreate(list.Count);
                    int i = 0;
                    bool err = false;
                    using (SqlCommand cmd = new SqlCommand("update STOCK set s_imagebin=@img where s_id=@s_id", conn.Connection))
                    {
                        foreach ((string s_id, string s_image) tuple in list)
                        {
                            i++;
                            Progress.ProgressIncrement(1);
                            Wait.WaitStatic.WaitWindow("Update Images : " + i + " / " + list.Count);
                            string imagePath = Globals.RepData + "IMAGES\\" + tuple.s_image;
                            if (File.Exists(imagePath))
                            {
                                cmd.Parameters.Clear();
                                cmd.Parameters.Add(new SqlParameter("@img", SqlDbType.Image)).Value = File.ReadAllBytes(imagePath);
                                cmd.Parameters.Add(new SqlParameter("@s_id", SqlDbType.Char)).Value = tuple.s_id;
                                if (!Api.SqlExec(Globals.RepData, cmd))
                                {
                                    err = true;
                                    break;
                                }
                            }
                        }
                    }
                    Progress.ProgressDestroy();
                    Wait.WaitStatic.WaitClear();
                    if (!err)
                        Dialogs.Stop("OK !");
                }
            }
        }
    }
}