package com.social.media.application.company.dto;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * DTO for Company responses
 */
public record CompanyResponseDto(
    String id,
    String name,
    String email,
    String website,
    String description,
    String phone,
    String address,
    String city,
    String state,
    String country,
    String postalCode,
    String industry,
    int employeeCount,
    String timezone,
    boolean active,
    String logoUrl,
    Map<String, Object> settings,
    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 website;
        private String description;
        private String phone;
        private String address;
        private String city;
        private String state;
        private String country;
        private String postalCode;
        private String industry;
        private int employeeCount;
        private String timezone;
        private boolean active;
        private String logoUrl;
        private Map<String, Object> settings;
        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 website(String website) {
            this.website = website;
            return this;
        }
        
        public Builder description(String description) {
            this.description = description;
            return this;
        }
        
        public Builder phone(String phone) {
            this.phone = phone;
            return this;
        }
        
        public Builder address(String address) {
            this.address = address;
            return this;
        }
        
        public Builder city(String city) {
            this.city = city;
            return this;
        }
        
        public Builder state(String state) {
            this.state = state;
            return this;
        }
        
        public Builder country(String country) {
            this.country = country;
            return this;
        }
        
        public Builder postalCode(String postalCode) {
            this.postalCode = postalCode;
            return this;
        }
        
        public Builder industry(String industry) {
            this.industry = industry;
            return this;
        }
        
        public Builder employeeCount(int employeeCount) {
            this.employeeCount = employeeCount;
            return this;
        }
        
        public Builder timezone(String timezone) {
            this.timezone = timezone;
            return this;
        }
        
        public Builder active(boolean active) {
            this.active = active;
            return this;
        }
        
        public Builder logoUrl(String logoUrl) {
            this.logoUrl = logoUrl;
            return this;
        }
        
        public Builder settings(Map<String, Object> settings) {
            this.settings = settings;
            return this;
        }
        
        public Builder createdAt(LocalDateTime createdAt) {
            this.createdAt = createdAt;
            return this;
        }
        
        public Builder updatedAt(LocalDateTime updatedAt) {
            this.updatedAt = updatedAt;
            return this;
        }
        
        public CompanyResponseDto build() {
            return new CompanyResponseDto(id, name, email, website, description, phone, address, 
                city, state, country, postalCode, industry, employeeCount, timezone, active, 
                logoUrl, settings, createdAt, updatedAt);
        }
    }
}

