LevelOS-Core/UI/Dashboards/Cadastros/CloudStorageCadastroPanel.cs

136 lines
5.0 KiB
C#

using CPM;
using MLL;
using System;
using System.Drawing;
using System.Windows.Forms;
using UI;
namespace UI
{
public partial class CloudStorageCadastroPanel : FormularioModelo
{
private ModeloCloudStorage _cloud = new ModeloCloudStorage();
private LV_TEXTBOX1 txtId, txtNome, txtPastaBase;
private ComboBox cbTipo;
private CheckBox chkAtivo;
private LV_TEXTBOX1 txtClientId, txtClientSecret, txtTokenStatus;
private Button btnAutenticar;
private LV_TEXTBOX1 txtUrl, txtUsuario, txtSenha;
public CloudStorageCadastroPanel()
{
this.Titulo = "Configuração de Armazenamento em Nuvem";
MontarInterface();
}
private void MontarInterface()
{
// --- SEÇÃO 1: Identificação ---
content.Controls.Add(CreateSectionHeader("IDENTIFICAÇÃO DA CONTA", 20));
txtId = AddInput(content, "ID", 20, 50, 70, 30, true);
txtNome = AddInput(content, "NOME DA CONEXÃO", 100, 50, 290, 30);
cbTipo = AddComboBox(content, "PROVEDOR", 400, 50, 150);
cbTipo.Items.AddRange(new object[] { "gdrive", "onedrive", "webdav" });
cbTipo.SelectedIndex = 0;
txtPastaBase = AddInput(content, "PASTA DESTINO (EX: /LevelOS_Backups)", 560, 50, 255, 30);
chkAtivo = new CheckBox
{
Text = "ATIVO",
Location = new Point(20, 100),
AutoSize = true,
Checked = true,
Font = new Font("Segoe UI", 8.5f, FontStyle.Bold)
};
content.Controls.Add(chkAtivo);
// --- SEÇÃO 2: OAuth2 ---
content.Controls.Add(CreateSectionHeader("AUTENTICAÇÃO OAUTH2 (GOOGLE / ONEDRIVE)", 125));
txtClientId = AddInput(content, "CLIENT ID", 20, 155, 350, 30);
txtClientSecret = AddInput(content, "CLIENT SECRET", 380, 155, 350, 30);
txtClientSecret.PasswordChar = '●';
// Botão alinhado com os inputs acima (Y = 155 + 16 = 171 do input, botão na próxima linha)
btnAutenticar = new Button
{
Text = "🔗 Vincular Conta",
Location = new Point(20, 200),
Size = new Size(150, 30),
BackColor = Color.FromArgb(66, 133, 244),
ForeColor = Color.White,
FlatStyle = FlatStyle.Flat,
Font = new Font("Segoe UI", 9, FontStyle.Bold),
FlatAppearance = { BorderSize = 0 }
};
btnAutenticar.Click += (s, e) =>
MessageBox.Show("Abrindo navegador para autorização...", "LevelOS Cloud");
content.Controls.Add(btnAutenticar);
// STATUS DO TOKEN em linha própria, label Y=245, input Y=261
txtTokenStatus = AddInput(content, "STATUS DO TOKEN", 20, 245, 710, 30, true);
// --- SEÇÃO 3: WebDAV ---
content.Controls.Add(CreateSectionHeader("CONFIGURAÇÃO WEBDAV (NEXTCLOUD / OWNCLOUD)", 295));
txtUrl = AddInput(content, "URL DO SERVIDOR (EX: https://nuvem.seucloud.com/remote.php/dav/files/user/)", 20, 325, 490, 30);
txtUsuario = AddInput(content, "USUÁRIO", 520, 325, 150, 30);
txtSenha = AddInput(content, "SENHA / APP KEY", 680, 325, 135, 30);
txtSenha.PasswordChar = '●';
content.Height = 395;
// Lógica para alternar habilitação por tipo
cbTipo.SelectedIndexChanged += (s, e) =>
{
bool isWebDav = cbTipo.Text == "webdav";
txtClientId.Enabled = !isWebDav;
txtClientSecret.Enabled = !isWebDav;
btnAutenticar.Enabled = !isWebDav;
txtUrl.Enabled = isWebDav;
txtUsuario.Enabled = isWebDav;
txtSenha.Enabled = isWebDav;
};
}
private void PreencherModel()
{
_cloud.Nome = txtNome.Text;
_cloud.Tipo = cbTipo.Text;
_cloud.PastaBase = txtPastaBase.Text;
_cloud.ClientId = txtClientId.Text;
_cloud.ClientSecret = txtClientSecret.Text;
_cloud.Url = txtUrl.Text;
_cloud.Usuario = txtUsuario.Text;
_cloud.Senha = txtSenha.Text;
_cloud.Ativo = chkAtivo.Checked;
}
protected override void OnSalvar()
{
PreencherModel();
MessageBox.Show($"Configuração {cbTipo.Text} salva com sucesso!", "LevelOS Cloud");
}
protected override void OnNovo()
{
_cloud = new ModeloCloudStorage();
cbTipo.SelectedIndex = 0;
}
protected override void OnExcluir()
{
MessageBox.Show("Configuração excluída.", "LevelOS Cloud");
}
protected override void OnAlterar() { throw new NotImplementedException(); }
protected override void OnLocalizar() { throw new NotImplementedException(); }
protected override void OnCancelar() { }
}
}