package com.social.media.application.socialnetwork.dto;

import java.time.LocalDateTime;
import java.util.Map;
import java.util.List;

/**
 * DTO for Social Network responses
 */
public record SocialNetworkResponseDto(
    String id,
    String name,
    String displayName,
    String description,
    String baseUrl,
    String apiVersion,
    boolean active,
    boolean supportsPosting,
    boolean supportsScheduling,
    boolean supportsAnalytics,
    int maxPostLength,
    List<String> supportedMediaTypes,
    Map<String, Object> authConfig,
    Map<String, Object> apiLimits,
    LocalDateTime createdAt,
    LocalDateTime updatedAt
) {
    
    public static Builder builder() {
        return new Builder();
    }
    
    public static class Builder {
        private String id;
        private String name;
        private String displayName;
        private String description;
        private String baseUrl;
        private String apiVersion;
        private boolean active;
        private boolean supportsPosting;
        private boolean supportsScheduling;
        private boolean supportsAnalytics;
        private int maxPostLength;
        private List<String> supportedMediaTypes;
        private Map<String, Object> authConfig;
        private Map<String, Object> apiLimits;
        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 displayName(String displayName) {
            this.displayName = displayName;
            return this;
        }
        
        public Builder description(String description) {
            this.description = description;
            return this;
        }
        
        public Builder baseUrl(String baseUrl) {
            this.baseUrl = baseUrl;
            return this;
        }
        
        public Builder apiVersion(String apiVersion) {
            this.apiVersion = apiVersion;
            return this;
        }
        
        public Builder active(boolean active) {
            this.active = active;
            return this;
        }
        
        public Builder supportsPosting(boolean supportsPosting) {
            this.supportsPosting = supportsPosting;
            return this;
        }
        
        public Builder supportsScheduling(boolean supportsScheduling) {
            this.supportsScheduling = supportsScheduling;
            return this;
        }
        
        public Builder supportsAnalytics(boolean supportsAnalytics) {
            this.supportsAnalytics = supportsAnalytics;
            return this;
        }
        
        public Builder maxPostLength(int maxPostLength) {
            this.maxPostLength = maxPostLength;
            return this;
        }
        
        public Builder supportedMediaTypes(List<String> supportedMediaTypes) {
            this.supportedMediaTypes = supportedMediaTypes;
            return this;
        }
        
        public Builder authConfig(Map<String, Object> authConfig) {
            this.authConfig = authConfig;
            return this;
        }
        
        public Builder apiLimits(Map<String, Object> apiLimits) {
            this.apiLimits = apiLimits;
            return this;
        }
        
        public Builder createdAt(LocalDateTime createdAt) {
            this.createdAt = createdAt;
            return this;
        }
        
        public Builder updatedAt(LocalDateTime updatedAt) {
            this.updatedAt = updatedAt;
            return this;
        }
        
        public SocialNetworkResponseDto build() {
            return new SocialNetworkResponseDto(id, name, displayName, description, baseUrl, 
                apiVersion, active, supportsPosting, supportsScheduling, supportsAnalytics, 
                maxPostLength, supportedMediaTypes, authConfig, apiLimits, createdAt, updatedAt);
        }
    }
}

