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() { } } }