package com.storycove.dto;

public class LibraryOverviewStatsDto {

    // Collection Overview
    private long totalStories;
    private long totalAuthors;
    private long totalSeries;
    private long totalTags;
    private long totalCollections;
    private long uniqueSourceDomains;

    // Content Metrics
    private long totalWordCount;
    private double averageWordsPerStory;
    private StoryWordCountDto longestStory;
    private StoryWordCountDto shortestStory;

    // Reading Time (based on 250 words/minute)
    private long totalReadingTimeMinutes;
    private double averageReadingTimeMinutes;

    // Constructor
    public LibraryOverviewStatsDto() {
    }

    // Getters and Setters
    public long getTotalStories() {
        return totalStories;
    }

    public void setTotalStories(long totalStories) {
        this.totalStories = totalStories;
    }

    public long getTotalAuthors() {
        return totalAuthors;
    }

    public void setTotalAuthors(long totalAuthors) {
        this.totalAuthors = totalAuthors;
    }

    public long getTotalSeries() {
        return totalSeries;
    }

    public void setTotalSeries(long totalSeries) {
        this.totalSeries = totalSeries;
    }

    public long getTotalTags() {
        return totalTags;
    }

    public void setTotalTags(long totalTags) {
        this.totalTags = totalTags;
    }

    public long getTotalCollections() {
        return totalCollections;
    }

    public void setTotalCollections(long totalCollections) {
        this.totalCollections = totalCollections;
    }

    public long getUniqueSourceDomains() {
        return uniqueSourceDomains;
    }

    public void setUniqueSourceDomains(long uniqueSourceDomains) {
        this.uniqueSourceDomains = uniqueSourceDomains;
    }

    public long getTotalWordCount() {
        return totalWordCount;
    }

    public void setTotalWordCount(long totalWordCount) {
        this.totalWordCount = totalWordCount;
    }

    public double getAverageWordsPerStory() {
        return averageWordsPerStory;
    }

    public void setAverageWordsPerStory(double averageWordsPerStory) {
        this.averageWordsPerStory = averageWordsPerStory;
    }

    public StoryWordCountDto getLongestStory() {
        return longestStory;
    }

    public void setLongestStory(StoryWordCountDto longestStory) {
        this.longestStory = longestStory;
    }

    public StoryWordCountDto getShortestStory() {
        return shortestStory;
    }

    public void setShortestStory(StoryWordCountDto shortestStory) {
        this.shortestStory = shortestStory;
    }

    public long getTotalReadingTimeMinutes() {
        return totalReadingTimeMinutes;
    }

    public void setTotalReadingTimeMinutes(long totalReadingTimeMinutes) {
        this.totalReadingTimeMinutes = totalReadingTimeMinutes;
    }

    public double getAverageReadingTimeMinutes() {
        return averageReadingTimeMinutes;
    }

    public void setAverageReadingTimeMinutes(double averageReadingTimeMinutes) {
        this.averageReadingTimeMinutes = averageReadingTimeMinutes;
    }

    // Nested DTO for story word count info
    public static class StoryWordCountDto {
        private String id;
        private String title;
        private String authorName;
        private int wordCount;
        private long readingTimeMinutes;

        public StoryWordCountDto() {
        }

        public StoryWordCountDto(String id, String title, String authorName, int wordCount, long readingTimeMinutes) {
            this.id = id;
            this.title = title;
            this.authorName = authorName;
            this.wordCount = wordCount;
            this.readingTimeMinutes = readingTimeMinutes;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getAuthorName() {
            return authorName;
        }

        public void setAuthorName(String authorName) {
            this.authorName = authorName;
        }

        public int getWordCount() {
            return wordCount;
        }

        public void setWordCount(int wordCount) {
            this.wordCount = wordCount;
        }

        public long getReadingTimeMinutes() {
            return readingTimeMinutes;
        }

        public void setReadingTimeMinutes(long readingTimeMinutes) {
            this.readingTimeMinutes = readingTimeMinutes;
        }
    }
}
