import * as plugins from '../plugins.js';
import type * as authInterfaces from '../data/auth.js';
import type { IDomain } from '../data/domain.js';
/**
 * Get all domains under management.
 */
export interface IReq_GetDomains extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetDomains> {
    method: 'getDomains';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
    };
    response: {
        domains: IDomain[];
    };
}
/**
 * Get a single domain by id.
 */
export interface IReq_GetDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetDomain> {
    method: 'getDomain';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        id: string;
    };
    response: {
        domain: IDomain | null;
    };
}
/**
 * Create a dcrouter-hosted (authoritative) domain. dcrouter will serve
 * DNS records for this domain via the embedded smartdns.DnsServer.
 */
export interface IReq_CreateDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CreateDomain> {
    method: 'createDomain';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        name: string;
        description?: string;
    };
    response: {
        success: boolean;
        id?: string;
        message?: string;
    };
}
/**
 * Import one or more domains from a DNS provider. For each imported
 * domain, records are pulled from the provider into DnsRecordDoc.
 */
export interface IReq_ImportDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ImportDomain> {
    method: 'importDomain';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        providerId: string;
        /** FQDN(s) of the zone(s) to import — must be visible to the provider account. */
        domainNames: string[];
    };
    response: {
        success: boolean;
        importedIds?: string[];
        message?: string;
    };
}
/**
 * Update a domain's metadata. Cannot change source / providerId once set.
 */
export interface IReq_UpdateDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_UpdateDomain> {
    method: 'updateDomain';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        id: string;
        description?: string;
    };
    response: {
        success: boolean;
        message?: string;
    };
}
/**
 * Delete a domain and all of its DNS records.
 * For provider-managed domains, this only removes dcrouter's local record —
 * it does NOT delete the zone at the provider.
 */
export interface IReq_DeleteDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteDomain> {
    method: 'deleteDomain';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        id: string;
    };
    response: {
        success: boolean;
        message?: string;
    };
}
/**
 * Force-resync a provider-managed domain: re-pulls all records from the
 * provider API, replacing the cached DnsRecordDocs.
 * No-op for dcrouter-hosted domains.
 */
export interface IReq_SyncDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_SyncDomain> {
    method: 'syncDomain';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        id: string;
    };
    response: {
        success: boolean;
        recordCount?: number;
        message?: string;
    };
}
/**
 * Migrate a domain between dcrouter-hosted and provider-managed (or between providers).
 * Records are transferred to the target and the domain source/providerId are updated.
 */
export interface IReq_MigrateDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_MigrateDomain> {
    method: 'migrateDomain';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        id: string;
        /** Target source type. */
        targetSource: import('../data/domain.js').TDomainSource;
        /** Required when targetSource is 'provider'. */
        targetProviderId?: string;
        /** When migrating to a provider: delete all existing records at the provider first. */
        deleteExistingProviderRecords?: boolean;
    };
    response: {
        success: boolean;
        /** Number of records migrated. */
        recordsMigrated?: number;
        message?: string;
    };
}
