/* 
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

package dev.plexapi.sdk.models.operations;


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import dev.plexapi.sdk.utils.Utils;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.Long;
import java.lang.Override;
import java.lang.String;
import java.util.List;
import java.util.Objects;


public class GetAllLibrariesDirectory {

    @JsonProperty("allowSync")
    private boolean allowSync;

    @JsonProperty("art")
    private String art;

    @JsonProperty("composite")
    private String composite;

    @JsonProperty("filters")
    private boolean filters;

    @JsonProperty("refreshing")
    private boolean refreshing;

    @JsonProperty("thumb")
    private String thumb;

    @JsonProperty("key")
    private String key;

    @JsonProperty("type")
    private String type;

    @JsonProperty("title")
    private String title;

    @JsonProperty("agent")
    private String agent;

    @JsonProperty("scanner")
    private String scanner;

    @JsonProperty("language")
    private String language;

    @JsonProperty("uuid")
    private String uuid;

    /**
     * Unix epoch datetime in seconds
     */
    @JsonProperty("updatedAt")
    private long updatedAt;

    /**
     * Unix epoch datetime in seconds
     */
    @JsonProperty("createdAt")
    private long createdAt;

    /**
     * Unix epoch datetime in seconds
     */
    @JsonProperty("scannedAt")
    private long scannedAt;

    @JsonProperty("content")
    private boolean content;

    @JsonProperty("directory")
    private boolean directory;

    /**
     * Unix epoch datetime in seconds
     */
    @JsonProperty("contentChangedAt")
    private long contentChangedAt;

    @JsonProperty("hidden")
    private int hidden;

    @JsonProperty("Location")
    private List<GetAllLibrariesLocation> location;

    @JsonCreator
    public GetAllLibrariesDirectory(
            @JsonProperty("allowSync") boolean allowSync,
            @JsonProperty("art") String art,
            @JsonProperty("composite") String composite,
            @JsonProperty("filters") boolean filters,
            @JsonProperty("refreshing") boolean refreshing,
            @JsonProperty("thumb") String thumb,
            @JsonProperty("key") String key,
            @JsonProperty("type") String type,
            @JsonProperty("title") String title,
            @JsonProperty("agent") String agent,
            @JsonProperty("scanner") String scanner,
            @JsonProperty("language") String language,
            @JsonProperty("uuid") String uuid,
            @JsonProperty("updatedAt") long updatedAt,
            @JsonProperty("createdAt") long createdAt,
            @JsonProperty("scannedAt") long scannedAt,
            @JsonProperty("content") boolean content,
            @JsonProperty("directory") boolean directory,
            @JsonProperty("contentChangedAt") long contentChangedAt,
            @JsonProperty("hidden") int hidden,
            @JsonProperty("Location") List<GetAllLibrariesLocation> location) {
        Utils.checkNotNull(allowSync, "allowSync");
        Utils.checkNotNull(art, "art");
        Utils.checkNotNull(composite, "composite");
        Utils.checkNotNull(filters, "filters");
        Utils.checkNotNull(refreshing, "refreshing");
        Utils.checkNotNull(thumb, "thumb");
        Utils.checkNotNull(key, "key");
        Utils.checkNotNull(type, "type");
        Utils.checkNotNull(title, "title");
        Utils.checkNotNull(agent, "agent");
        Utils.checkNotNull(scanner, "scanner");
        Utils.checkNotNull(language, "language");
        Utils.checkNotNull(uuid, "uuid");
        Utils.checkNotNull(updatedAt, "updatedAt");
        Utils.checkNotNull(createdAt, "createdAt");
        Utils.checkNotNull(scannedAt, "scannedAt");
        Utils.checkNotNull(content, "content");
        Utils.checkNotNull(directory, "directory");
        Utils.checkNotNull(contentChangedAt, "contentChangedAt");
        Utils.checkNotNull(hidden, "hidden");
        Utils.checkNotNull(location, "location");
        this.allowSync = allowSync;
        this.art = art;
        this.composite = composite;
        this.filters = filters;
        this.refreshing = refreshing;
        this.thumb = thumb;
        this.key = key;
        this.type = type;
        this.title = title;
        this.agent = agent;
        this.scanner = scanner;
        this.language = language;
        this.uuid = uuid;
        this.updatedAt = updatedAt;
        this.createdAt = createdAt;
        this.scannedAt = scannedAt;
        this.content = content;
        this.directory = directory;
        this.contentChangedAt = contentChangedAt;
        this.hidden = hidden;
        this.location = location;
    }

    @JsonIgnore
    public boolean allowSync() {
        return allowSync;
    }

    @JsonIgnore
    public String art() {
        return art;
    }

    @JsonIgnore
    public String composite() {
        return composite;
    }

    @JsonIgnore
    public boolean filters() {
        return filters;
    }

    @JsonIgnore
    public boolean refreshing() {
        return refreshing;
    }

    @JsonIgnore
    public String thumb() {
        return thumb;
    }

    @JsonIgnore
    public String key() {
        return key;
    }

    @JsonIgnore
    public String type() {
        return type;
    }

    @JsonIgnore
    public String title() {
        return title;
    }

    @JsonIgnore
    public String agent() {
        return agent;
    }

    @JsonIgnore
    public String scanner() {
        return scanner;
    }

    @JsonIgnore
    public String language() {
        return language;
    }

    @JsonIgnore
    public String uuid() {
        return uuid;
    }

    /**
     * Unix epoch datetime in seconds
     */
    @JsonIgnore
    public long updatedAt() {
        return updatedAt;
    }

    /**
     * Unix epoch datetime in seconds
     */
    @JsonIgnore
    public long createdAt() {
        return createdAt;
    }

    /**
     * Unix epoch datetime in seconds
     */
    @JsonIgnore
    public long scannedAt() {
        return scannedAt;
    }

    @JsonIgnore
    public boolean content() {
        return content;
    }

    @JsonIgnore
    public boolean directory() {
        return directory;
    }

    /**
     * Unix epoch datetime in seconds
     */
    @JsonIgnore
    public long contentChangedAt() {
        return contentChangedAt;
    }

    @JsonIgnore
    public int hidden() {
        return hidden;
    }

    @JsonIgnore
    public List<GetAllLibrariesLocation> location() {
        return location;
    }

    public final static Builder builder() {
        return new Builder();
    }

    public GetAllLibrariesDirectory withAllowSync(boolean allowSync) {
        Utils.checkNotNull(allowSync, "allowSync");
        this.allowSync = allowSync;
        return this;
    }

    public GetAllLibrariesDirectory withArt(String art) {
        Utils.checkNotNull(art, "art");
        this.art = art;
        return this;
    }

    public GetAllLibrariesDirectory withComposite(String composite) {
        Utils.checkNotNull(composite, "composite");
        this.composite = composite;
        return this;
    }

    public GetAllLibrariesDirectory withFilters(boolean filters) {
        Utils.checkNotNull(filters, "filters");
        this.filters = filters;
        return this;
    }

    public GetAllLibrariesDirectory withRefreshing(boolean refreshing) {
        Utils.checkNotNull(refreshing, "refreshing");
        this.refreshing = refreshing;
        return this;
    }

    public GetAllLibrariesDirectory withThumb(String thumb) {
        Utils.checkNotNull(thumb, "thumb");
        this.thumb = thumb;
        return this;
    }

    public GetAllLibrariesDirectory withKey(String key) {
        Utils.checkNotNull(key, "key");
        this.key = key;
        return this;
    }

    public GetAllLibrariesDirectory withType(String type) {
        Utils.checkNotNull(type, "type");
        this.type = type;
        return this;
    }

    public GetAllLibrariesDirectory withTitle(String title) {
        Utils.checkNotNull(title, "title");
        this.title = title;
        return this;
    }

    public GetAllLibrariesDirectory withAgent(String agent) {
        Utils.checkNotNull(agent, "agent");
        this.agent = agent;
        return this;
    }

    public GetAllLibrariesDirectory withScanner(String scanner) {
        Utils.checkNotNull(scanner, "scanner");
        this.scanner = scanner;
        return this;
    }

    public GetAllLibrariesDirectory withLanguage(String language) {
        Utils.checkNotNull(language, "language");
        this.language = language;
        return this;
    }

    public GetAllLibrariesDirectory withUuid(String uuid) {
        Utils.checkNotNull(uuid, "uuid");
        this.uuid = uuid;
        return this;
    }

    /**
     * Unix epoch datetime in seconds
     */
    public GetAllLibrariesDirectory withUpdatedAt(long updatedAt) {
        Utils.checkNotNull(updatedAt, "updatedAt");
        this.updatedAt = updatedAt;
        return this;
    }

    /**
     * Unix epoch datetime in seconds
     */
    public GetAllLibrariesDirectory withCreatedAt(long createdAt) {
        Utils.checkNotNull(createdAt, "createdAt");
        this.createdAt = createdAt;
        return this;
    }

    /**
     * Unix epoch datetime in seconds
     */
    public GetAllLibrariesDirectory withScannedAt(long scannedAt) {
        Utils.checkNotNull(scannedAt, "scannedAt");
        this.scannedAt = scannedAt;
        return this;
    }

    public GetAllLibrariesDirectory withContent(boolean content) {
        Utils.checkNotNull(content, "content");
        this.content = content;
        return this;
    }

    public GetAllLibrariesDirectory withDirectory(boolean directory) {
        Utils.checkNotNull(directory, "directory");
        this.directory = directory;
        return this;
    }

    /**
     * Unix epoch datetime in seconds
     */
    public GetAllLibrariesDirectory withContentChangedAt(long contentChangedAt) {
        Utils.checkNotNull(contentChangedAt, "contentChangedAt");
        this.contentChangedAt = contentChangedAt;
        return this;
    }

    public GetAllLibrariesDirectory withHidden(int hidden) {
        Utils.checkNotNull(hidden, "hidden");
        this.hidden = hidden;
        return this;
    }

    public GetAllLibrariesDirectory withLocation(List<GetAllLibrariesLocation> location) {
        Utils.checkNotNull(location, "location");
        this.location = location;
        return this;
    }
    
    @Override
    public boolean equals(java.lang.Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        GetAllLibrariesDirectory other = (GetAllLibrariesDirectory) o;
        return 
            Objects.deepEquals(this.allowSync, other.allowSync) &&
            Objects.deepEquals(this.art, other.art) &&
            Objects.deepEquals(this.composite, other.composite) &&
            Objects.deepEquals(this.filters, other.filters) &&
            Objects.deepEquals(this.refreshing, other.refreshing) &&
            Objects.deepEquals(this.thumb, other.thumb) &&
            Objects.deepEquals(this.key, other.key) &&
            Objects.deepEquals(this.type, other.type) &&
            Objects.deepEquals(this.title, other.title) &&
            Objects.deepEquals(this.agent, other.agent) &&
            Objects.deepEquals(this.scanner, other.scanner) &&
            Objects.deepEquals(this.language, other.language) &&
            Objects.deepEquals(this.uuid, other.uuid) &&
            Objects.deepEquals(this.updatedAt, other.updatedAt) &&
            Objects.deepEquals(this.createdAt, other.createdAt) &&
            Objects.deepEquals(this.scannedAt, other.scannedAt) &&
            Objects.deepEquals(this.content, other.content) &&
            Objects.deepEquals(this.directory, other.directory) &&
            Objects.deepEquals(this.contentChangedAt, other.contentChangedAt) &&
            Objects.deepEquals(this.hidden, other.hidden) &&
            Objects.deepEquals(this.location, other.location);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(
            allowSync,
            art,
            composite,
            filters,
            refreshing,
            thumb,
            key,
            type,
            title,
            agent,
            scanner,
            language,
            uuid,
            updatedAt,
            createdAt,
            scannedAt,
            content,
            directory,
            contentChangedAt,
            hidden,
            location);
    }
    
    @Override
    public String toString() {
        return Utils.toString(GetAllLibrariesDirectory.class,
                "allowSync", allowSync,
                "art", art,
                "composite", composite,
                "filters", filters,
                "refreshing", refreshing,
                "thumb", thumb,
                "key", key,
                "type", type,
                "title", title,
                "agent", agent,
                "scanner", scanner,
                "language", language,
                "uuid", uuid,
                "updatedAt", updatedAt,
                "createdAt", createdAt,
                "scannedAt", scannedAt,
                "content", content,
                "directory", directory,
                "contentChangedAt", contentChangedAt,
                "hidden", hidden,
                "location", location);
    }
    
    public final static class Builder {
 
        private Boolean allowSync;
 
        private String art;
 
        private String composite;
 
        private Boolean filters;
 
        private Boolean refreshing;
 
        private String thumb;
 
        private String key;
 
        private String type;
 
        private String title;
 
        private String agent;
 
        private String scanner;
 
        private String language;
 
        private String uuid;
 
        private Long updatedAt;
 
        private Long createdAt;
 
        private Long scannedAt;
 
        private Boolean content;
 
        private Boolean directory;
 
        private Long contentChangedAt;
 
        private Integer hidden;
 
        private List<GetAllLibrariesLocation> location;  
        
        private Builder() {
          // force use of static builder() method
        }

        public Builder allowSync(boolean allowSync) {
            Utils.checkNotNull(allowSync, "allowSync");
            this.allowSync = allowSync;
            return this;
        }

        public Builder art(String art) {
            Utils.checkNotNull(art, "art");
            this.art = art;
            return this;
        }

        public Builder composite(String composite) {
            Utils.checkNotNull(composite, "composite");
            this.composite = composite;
            return this;
        }

        public Builder filters(boolean filters) {
            Utils.checkNotNull(filters, "filters");
            this.filters = filters;
            return this;
        }

        public Builder refreshing(boolean refreshing) {
            Utils.checkNotNull(refreshing, "refreshing");
            this.refreshing = refreshing;
            return this;
        }

        public Builder thumb(String thumb) {
            Utils.checkNotNull(thumb, "thumb");
            this.thumb = thumb;
            return this;
        }

        public Builder key(String key) {
            Utils.checkNotNull(key, "key");
            this.key = key;
            return this;
        }

        public Builder type(String type) {
            Utils.checkNotNull(type, "type");
            this.type = type;
            return this;
        }

        public Builder title(String title) {
            Utils.checkNotNull(title, "title");
            this.title = title;
            return this;
        }

        public Builder agent(String agent) {
            Utils.checkNotNull(agent, "agent");
            this.agent = agent;
            return this;
        }

        public Builder scanner(String scanner) {
            Utils.checkNotNull(scanner, "scanner");
            this.scanner = scanner;
            return this;
        }

        public Builder language(String language) {
            Utils.checkNotNull(language, "language");
            this.language = language;
            return this;
        }

        public Builder uuid(String uuid) {
            Utils.checkNotNull(uuid, "uuid");
            this.uuid = uuid;
            return this;
        }

        /**
         * Unix epoch datetime in seconds
         */
        public Builder updatedAt(long updatedAt) {
            Utils.checkNotNull(updatedAt, "updatedAt");
            this.updatedAt = updatedAt;
            return this;
        }

        /**
         * Unix epoch datetime in seconds
         */
        public Builder createdAt(long createdAt) {
            Utils.checkNotNull(createdAt, "createdAt");
            this.createdAt = createdAt;
            return this;
        }

        /**
         * Unix epoch datetime in seconds
         */
        public Builder scannedAt(long scannedAt) {
            Utils.checkNotNull(scannedAt, "scannedAt");
            this.scannedAt = scannedAt;
            return this;
        }

        public Builder content(boolean content) {
            Utils.checkNotNull(content, "content");
            this.content = content;
            return this;
        }

        public Builder directory(boolean directory) {
            Utils.checkNotNull(directory, "directory");
            this.directory = directory;
            return this;
        }

        /**
         * Unix epoch datetime in seconds
         */
        public Builder contentChangedAt(long contentChangedAt) {
            Utils.checkNotNull(contentChangedAt, "contentChangedAt");
            this.contentChangedAt = contentChangedAt;
            return this;
        }

        public Builder hidden(int hidden) {
            Utils.checkNotNull(hidden, "hidden");
            this.hidden = hidden;
            return this;
        }

        public Builder location(List<GetAllLibrariesLocation> location) {
            Utils.checkNotNull(location, "location");
            this.location = location;
            return this;
        }
        
        public GetAllLibrariesDirectory build() {
            return new GetAllLibrariesDirectory(
                allowSync,
                art,
                composite,
                filters,
                refreshing,
                thumb,
                key,
                type,
                title,
                agent,
                scanner,
                language,
                uuid,
                updatedAt,
                createdAt,
                scannedAt,
                content,
                directory,
                contentChangedAt,
                hidden,
                location);
        }
    }
}

