package com.gnx.telemedicine.dto.user;

import jakarta.validation.Valid;
import jakarta.validation.constraints.*;

import java.math.BigDecimal;
import java.util.List;

public record DoctorRegistrationDto(
        @Valid UserRegistrationDto user,

        @NotBlank(message = "Medical license number is required")
        @Size(max = 100, message = "Medical license number must be at most 100 characters")
        String medicalLicenseNumber,

        @NotBlank(message = "Specialization is required")
        @Size(max = 100, message = "Specialization must be at most 100 characters")
        String specialization,

        @Min(value = 0, message = "Experience must be at least 0 years")
        @Max(value = 50, message = "Experience must be at most 50 years")
        Integer yearsOfExperience,

        @Size(max = 1000)
        String biography,

        @NotNull(message = "Consultation fee is required")
        @DecimalMin(value = "0.0", message = "Fee must be at least 0")
        BigDecimal consultationFee,
        // Enterprise fields (optional during registration)
        @Size(max = 255, message = "Street address must not exceed 255 characters")
        String streetAddress,
        @Size(max = 100, message = "City must not exceed 100 characters")
        String city,
        @Size(max = 100, message = "State must not exceed 100 characters")
        String state,
        @Size(max = 20, message = "Zip code must not exceed 20 characters")
        String zipCode,
        @Size(max = 100, message = "Country must not exceed 100 characters")
        String country,
        @Size(max = 200, message = "Education degree must not exceed 200 characters")
        String educationDegree,
        @Size(max = 200, message = "Education university must not exceed 200 characters")
        String educationUniversity,
        @Min(value = 1900, message = "Graduation year must be at least 1900")
        @Max(value = 2100, message = "Graduation year cannot exceed 2100")
        Integer educationGraduationYear,
        List<String> certifications,
        List<String> languagesSpoken,
        List<String> hospitalAffiliations,
        List<String> insuranceAccepted,
        List<String> professionalMemberships
) {
}
