/**
 * Base DNS Provider Adapter
 * All DNS provider adapters must extend this class and implement the required methods.
 * 
 * Each adapter handles the specifics of talking to a particular DNS provider's API.
 * The routes layer calls these methods generically — no provider-specific logic in routes.
 */
class BaseDNSProvider {
  constructor(config, ctx) {
    this.config = config;    // Provider-specific config (api token, server url, etc.)
    this.ctx = ctx;          // Shared app context (log, credentialManager, fetchT, etc.)
    this.providerId = 'base';
    this.displayName = 'Base DNS Provider';
  }

  /** Check if this provider supports a given capability */
  supportsCapability(cap) {
    // Capabilities: 'create-record', 'delete-record', 'resolve', 'list-records',
    //              'logs', 'restart', 'update-check', 'credentials', 'zones'
    return false;
  }

  /** Authenticate and return a token/session */
  async authenticate() { throw new Error('Not implemented'); }

  /** Create a DNS record */
  async createRecord({ domain, zone, type, value, ttl, overwrite }) { throw new Error('Not implemented'); }

  /** Delete a DNS record */
  async deleteRecord({ domain, type, value }) { throw new Error('Not implemented'); }

  /** Resolve/query existing records for a domain */
  async resolveRecords({ domain, zone, type }) { throw new Error('Not implemented'); }

  /** List all records in a zone */
  async listRecords({ zone }) { throw new Error('Not implemented'); }

  /** Get DNS query logs */
  async getLogs({ limit, server }) { throw new Error('Not implemented'); }

  /** Restart the DNS server */
  async restartServer({ server }) { throw new Error('Not implemented'); }

  /** Check for DNS server updates */
  async checkUpdate({ server }) { throw new Error('Not implemented'); }

  /** Get provider status info */
  async getStatus() {
    return {
      providerId: this.providerId,
      displayName: this.displayName,
      capabilities: this.getCapabilities(),
      authenticated: false
    };
  }

  /** Get list of supported capabilities */
  getCapabilities() {
    return [];
  }

  /** Validate provider-specific config */
  validateConfig() { return { valid: true, errors: [] }; }

  /** Clean up resources on shutdown */
  async shutdown() {}
}

module.exports = BaseDNSProvider;
