package com.gnx.telemedicine.dto.user;

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Positive;
import jakarta.validation.constraints.Size;

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

public record DoctorUpdateDto(
        @Size(min = 2, max = 100, message = "Medical license number must be between 2 and 100 characters")
        String medicalLicenseNumber,
        @Size(min = 2, max = 100, message = "Specialization must be between 2 and 100 characters")
        String specialization,
        @Min(value = 0, message = "Years of experience cannot be negative")
        Integer yearsOfExperience,
        @Size(max = 1000, message = "Biography must not exceed 1000 characters")
        String biography,
        @Positive(message = "Consultation fee must be positive")
        BigDecimal consultationFee,
        @Min(value = 15, message = "Default duration must be at least 15 minutes")
        @Max(value = 120, message = "Default duration cannot exceed 120 minutes")
        Integer defaultDurationMinutes,
        // Enterprise fields
        @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
) {
}
