"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EstateIdParamDto = exports.InitializeEstatePaymentDto = exports.RecordEstatePaymentDto = exports.SelectSubscriptionPlanDto = exports.EstateAdminLeadSignupDto = void 0;
const client_1 = require("@prisma/client");
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator");
const swagger_docs_1 = require("../../common/swagger-docs");
class EstateAdminLeadSignupDto {
    estateName;
    location;
    unitCount;
    estateType;
    adminName;
    adminPhone;
    adminEmail;
    metadata;
    estateLocation;
    gateCount;
    securityPersonnelCount;
    currentVisitorEntryProcess;
    externalSecurityCompany;
    managementChallenges;
    gateWiseBudget;
    emailVerificationToken;
    phoneVerificationToken;
}
exports.EstateAdminLeadSignupDto = EstateAdminLeadSignupDto;
__decorate([
    (0, swagger_1.ApiProperty)({ example: 'GreenPark Estate', description: 'Estate name submitted by the prospective estate admin.' }),
    (0, class_validator_1.IsString)(),
    (0, class_validator_1.MinLength)(2),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "estateName", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ example: 'Lagos, Nigeria', description: 'Estate location for super-admin review.' }),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "location", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ example: 120, description: 'Number of units/houses/residents expected in the estate.' }),
    (0, class_validator_1.IsInt)(),
    (0, class_validator_1.Min)(1),
    __metadata("design:type", Number)
], EstateAdminLeadSignupDto.prototype, "unitCount", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ example: 'Residential gated community', description: 'Estate type or category.' }),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "estateType", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ example: 'Ade Okafor', description: 'Prospective estate admin full name.' }),
    (0, class_validator_1.IsString)(),
    (0, class_validator_1.MinLength)(2),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "adminName", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ example: '+2348000000990', description: 'Prospective estate admin login phone number.' }),
    (0, class_validator_1.IsPhoneNumber)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "adminPhone", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'estate.admin@example.com', description: 'Prospective estate admin email for payment checkout receipts.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsEmail)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "adminEmail", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: { source: 'website' }, description: 'Optional lead metadata.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsObject)(),
    __metadata("design:type", Object)
], EstateAdminLeadSignupDto.prototype, "metadata", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'Lekki Phase 1', description: 'Estate/community location details for demo qualification.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "estateLocation", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 3, description: 'Number of gates the estate operates.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsInt)(),
    (0, class_validator_1.Min)(1),
    __metadata("design:type", Number)
], EstateAdminLeadSignupDto.prototype, "gateCount", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 12, description: 'Number of security personnel.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsInt)(),
    (0, class_validator_1.Min)(0),
    __metadata("design:type", Number)
], EstateAdminLeadSignupDto.prototype, "securityPersonnelCount", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'Phone calls to gate guards', description: 'Current visitor entry process.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "currentVisitorEntryProcess", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'External Security Ltd', description: 'External gate management company if applicable.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "externalSecurityCompany", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'Traffic logs, visitor analytics, payment workflow', description: 'Management challenges to test in demo.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "managementChallenges", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'NGN 500,000 monthly', description: 'Estate budget for GateWise solution.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "gateWiseBudget", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'otp-email-token', description: 'Email verification token/code from the demo registration flow.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "emailVerificationToken", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'otp-phone-token', description: 'Phone verification token/code from the demo registration flow.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], EstateAdminLeadSignupDto.prototype, "phoneVerificationToken", void 0);
class SelectSubscriptionPlanDto {
    adminPhone;
    planCode;
    paymentProvider;
}
exports.SelectSubscriptionPlanDto = SelectSubscriptionPlanDto;
__decorate([
    (0, swagger_1.ApiProperty)({ example: '+2348000000990', description: 'Phone number used during estate admin signup.' }),
    (0, class_validator_1.IsPhoneNumber)(),
    __metadata("design:type", String)
], SelectSubscriptionPlanDto.prototype, "adminPhone", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ example: 'SECURE', description: 'Subscription plan code: STARTER, SECURE, LUXURY, BUSINESS, or future ENTERPRISE.' }),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], SelectSubscriptionPlanDto.prototype, "planCode", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ enum: client_1.PaymentProvider, example: client_1.PaymentProvider.FLUTTERWAVE, description: 'Payment provider selected for checkout.' }),
    (0, class_validator_1.IsEnum)(client_1.PaymentProvider),
    __metadata("design:type", String)
], SelectSubscriptionPlanDto.prototype, "paymentProvider", void 0);
class RecordEstatePaymentDto {
    adminPhone;
    planCode;
    paymentProvider;
    reference;
    amountKobo;
    metadata;
}
exports.RecordEstatePaymentDto = RecordEstatePaymentDto;
__decorate([
    (0, swagger_1.ApiProperty)({ example: '+2348000000990', description: 'Phone number used during estate admin signup.' }),
    (0, class_validator_1.IsPhoneNumber)(),
    __metadata("design:type", String)
], RecordEstatePaymentDto.prototype, "adminPhone", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'SECURE', description: 'Plan code if not already selected.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], RecordEstatePaymentDto.prototype, "planCode", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ enum: client_1.PaymentProvider, example: client_1.PaymentProvider.FLUTTERWAVE, description: 'Provider if not already selected.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsEnum)(client_1.PaymentProvider),
    __metadata("design:type", String)
], RecordEstatePaymentDto.prototype, "paymentProvider", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ example: 'MANUAL-TRANSFER-001', description: 'Manual transfer or non-hosted checkout reference.' }),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], RecordEstatePaymentDto.prototype, "reference", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 50000000, description: 'Amount in kobo. Optional for custom pricing.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsInt)(),
    (0, class_validator_1.Min)(0),
    __metadata("design:type", Number)
], RecordEstatePaymentDto.prototype, "amountKobo", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: { channel: 'card' }, description: 'Gateway response or manual payment metadata.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsObject)(),
    __metadata("design:type", Object)
], RecordEstatePaymentDto.prototype, "metadata", void 0);
class InitializeEstatePaymentDto {
    adminPhone;
    customerEmail;
    customerName;
    planCode;
    paymentProvider;
    amountKobo;
    returnUrl;
    metadata;
}
exports.InitializeEstatePaymentDto = InitializeEstatePaymentDto;
__decorate([
    (0, swagger_1.ApiProperty)({ example: '+2348000000990', description: 'Phone number used during estate admin signup.' }),
    (0, class_validator_1.IsPhoneNumber)(),
    __metadata("design:type", String)
], InitializeEstatePaymentDto.prototype, "adminPhone", void 0);
__decorate([
    (0, swagger_1.ApiProperty)({ example: 'estate.admin@example.com', description: 'Customer email required by hosted payment checkouts.' }),
    (0, class_validator_1.IsEmail)(),
    __metadata("design:type", String)
], InitializeEstatePaymentDto.prototype, "customerEmail", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'Ade Okafor', description: 'Customer name for checkout. Defaults to estate admin name when omitted.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], InitializeEstatePaymentDto.prototype, "customerName", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'SECURE', description: 'Plan code if not already selected.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsString)(),
    __metadata("design:type", String)
], InitializeEstatePaymentDto.prototype, "planCode", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ enum: client_1.PaymentProvider, example: client_1.PaymentProvider.FLUTTERWAVE, description: 'Provider if not already selected.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsEnum)(client_1.PaymentProvider),
    __metadata("design:type", String)
], InitializeEstatePaymentDto.prototype, "paymentProvider", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 50000000, description: 'Amount in kobo. Required for custom-priced plans.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsInt)(),
    (0, class_validator_1.Min)(0),
    __metadata("design:type", Number)
], InitializeEstatePaymentDto.prototype, "amountKobo", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: 'https://app.example.com/billing/return', description: 'Optional client return URL to store with payment metadata.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsUrl)({ require_tld: false }),
    __metadata("design:type", String)
], InitializeEstatePaymentDto.prototype, "returnUrl", void 0);
__decorate([
    (0, swagger_1.ApiPropertyOptional)({ example: { channel: 'card' }, description: 'Additional metadata sent to the gateway and stored locally.' }),
    (0, class_validator_1.IsOptional)(),
    (0, class_validator_1.IsObject)(),
    __metadata("design:type", Object)
], InitializeEstatePaymentDto.prototype, "metadata", void 0);
class EstateIdParamDto {
    estateId;
}
exports.EstateIdParamDto = EstateIdParamDto;
__decorate([
    (0, swagger_1.ApiProperty)({ example: swagger_docs_1.ESTATE_ID_EXAMPLE }),
    __metadata("design:type", String)
], EstateIdParamDto.prototype, "estateId", void 0);
//# sourceMappingURL=onboarding.dto.js.map