import { AccessInput, BaseAccess, IsAccess } from '@certd/pipeline';
import { ConnectConfig } from 'ssh2';

@IsAccess({
  name: 'ssh',
  title: '主机登录授权',
  desc: '',
  input: {},
})
export class SshAccess extends BaseAccess implements ConnectConfig {
  @AccessInput({
    title: '主机地址',
    component: {
      placeholder: '主机域名或IP地址',
    },
    required: true,
  })
  host!: string;
  @AccessInput({
    title: '端口',
    value: 22,
    component: {
      name: 'a-input-number',
      placeholder: '22',
    },
    rules: [{ required: true, message: '此项必填' }],
  })
  port!: number;
  @AccessInput({
    title: '用户名',
    value: 'root',
    rules: [{ required: true, message: '此项必填' }],
  })
  username!: string;
  @AccessInput({
    title: '密码',
    component: {
      name: 'a-input-password',
      vModel: 'value',
    },
    encrypt: true,
    helper: '登录密码或密钥必填一项',
  })
  password!: string;
  @AccessInput({
    title: '私钥登录',
    helper: '私钥或密码必填一项',
    component: {
      name: 'a-textarea',
      vModel: 'value',
    },
    encrypt: true,
  })
  privateKey!: string;

  @AccessInput({
    title: '私钥密码',
    helper: '如果你的私钥有密码的话',
    component: {
      name: 'a-input-password',
      vModel: 'value',
    },
    encrypt: true,
  })
  passphrase!: string;

  @AccessInput({
    title: 'socks代理',
    helper: 'socks代理配置，格式：socks5://user:password@host:port',
    component: {
      name: 'a-input',
      vModel: 'value',
      placeholder: 'socks5://user:password@host:port',
    },
    encrypt: false,
  })
  socksProxy!: string;

  @AccessInput({
    title: '是否Windows',
    helper: '如果是Windows主机，请勾选此项\n并且需要windows[安装OpenSSH](https://certd.docmirror.cn/guide/use/host/windows.html)',
    component: {
      name: 'a-switch',
      vModel: 'checked',
    },
  })
  windows = false;

  @AccessInput({
    title: '命令编码',
    helper: '如果是Windows主机，且出现乱码了，请尝试设置为GBK',
    component: {
      name: 'a-select',
      vModel: 'value',
      options: [
        { value: '', label: '默认' },
        { value: 'GBK', label: 'GBK' },
        { value: 'UTF8', label: 'UTF-8' },
      ],
    },
  })
  encoding: string;
}

new SshAccess();
