package com.social.media.application.user.dto;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * DTO for User responses
 */
public record UserResponseDto(
    String id,
    String name,
    String email,
    String phone,
    String position,
    String department,
    String status,
    String companyId,
    String avatarUrl,
    boolean emailVerified,
    boolean whatsappEnabled,
    LocalDateTime lastAccessDate,
    Map<String, Object> permissions,
    Map<String, Object> configuration,
    LocalDateTime createdAt,
    LocalDateTime updatedAt
) {
    
    public static Builder builder() {
        return new Builder();
    }
    
    public static class Builder {
        private String id;
        private String name;
        private String email;
        private String phone;
        private String position;
        private String department;
        private String status;
        private String companyId;
        private String avatarUrl;
        private boolean emailVerified;
        private boolean whatsappEnabled;
        private LocalDateTime lastAccessDate;
        private Map<String, Object> permissions;
        private Map<String, Object> configuration;
        private LocalDateTime createdAt;
        private LocalDateTime updatedAt;
        
        public Builder id(String id) {
            this.id = id;
            return this;
        }
        
        public Builder name(String name) {
            this.name = name;
            return this;
        }
        
        public Builder email(String email) {
            this.email = email;
            return this;
        }
        
        public Builder phone(String phone) {
            this.phone = phone;
            return this;
        }
        
        public Builder position(String position) {
            this.position = position;
            return this;
        }
        
        public Builder department(String department) {
            this.department = department;
            return this;
        }
        
        public Builder status(String status) {
            this.status = status;
            return this;
        }
        
        public Builder companyId(String companyId) {
            this.companyId = companyId;
            return this;
        }
        
        public Builder avatarUrl(String avatarUrl) {
            this.avatarUrl = avatarUrl;
            return this;
        }
        
        public Builder emailVerified(boolean emailVerified) {
            this.emailVerified = emailVerified;
            return this;
        }
        
        public Builder whatsappEnabled(boolean whatsappEnabled) {
            this.whatsappEnabled = whatsappEnabled;
            return this;
        }
        
        public Builder lastAccessDate(LocalDateTime lastAccessDate) {
            this.lastAccessDate = lastAccessDate;
            return this;
        }
        
        public Builder permissions(Map<String, Object> permissions) {
            this.permissions = permissions;
            return this;
        }
        
        public Builder configuration(Map<String, Object> configuration) {
            this.configuration = configuration;
            return this;
        }
        
        public Builder createdAt(LocalDateTime createdAt) {
            this.createdAt = createdAt;
            return this;
        }
        
        public Builder updatedAt(LocalDateTime updatedAt) {
            this.updatedAt = updatedAt;
            return this;
        }
        
        public UserResponseDto build() {
            return new UserResponseDto(id, name, email, phone, position, department, status, 
                companyId, avatarUrl, emailVerified, whatsappEnabled, lastAccessDate, 
                permissions, configuration, createdAt, updatedAt);
        }
    }
}

