package kz.konturai.parser.dto;

import java.time.LocalDateTime;
import java.util.List;

public class MarketingStrategyResponse {
    private String strategyId;
    private String analysisId;
    private String status;
    private LocalDateTime createdAt;
    private LocalDateTime completedAt;
    private Integer durationWeeks;
    private List<String> priorityPlatforms;
    private StrategyContent strategy;

    public MarketingStrategyResponse() {
    }

    public MarketingStrategyResponse(String strategyId, String analysisId, String status, LocalDateTime createdAt,
            LocalDateTime completedAt, Integer durationWeeks, List<String> priorityPlatforms,
            StrategyContent strategy) {
        this.strategyId = strategyId;
        this.analysisId = analysisId;
        this.status = status;
        this.createdAt = createdAt;
        this.completedAt = completedAt;
        this.durationWeeks = durationWeeks;
        this.priorityPlatforms = priorityPlatforms;
        this.strategy = strategy;
    }

    public String getStrategyId() {
        return strategyId;
    }

    public void setStrategyId(String strategyId) {
        this.strategyId = strategyId;
    }

    public String getAnalysisId() {
        return analysisId;
    }

    public void setAnalysisId(String analysisId) {
        this.analysisId = analysisId;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public LocalDateTime getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(LocalDateTime createdAt) {
        this.createdAt = createdAt;
    }

    public LocalDateTime getCompletedAt() {
        return completedAt;
    }

    public void setCompletedAt(LocalDateTime completedAt) {
        this.completedAt = completedAt;
    }

    public Integer getDurationWeeks() {
        return durationWeeks;
    }

    public void setDurationWeeks(Integer durationWeeks) {
        this.durationWeeks = durationWeeks;
    }

    public List<String> getPriorityPlatforms() {
        return priorityPlatforms;
    }

    public void setPriorityPlatforms(List<String> priorityPlatforms) {
        this.priorityPlatforms = priorityPlatforms;
    }

    public StrategyContent getStrategy() {
        return strategy;
    }

    public void setStrategy(StrategyContent strategy) {
        this.strategy = strategy;
    }

    public static class StrategyContent {
        private List<WeeklyPlan> weeklyPlans;
        private List<PostCalendarItem> postCalendar;

        public StrategyContent() {
        }

        public StrategyContent(List<WeeklyPlan> weeklyPlans, List<PostCalendarItem> postCalendar) {
            this.weeklyPlans = weeklyPlans;
            this.postCalendar = postCalendar;
        }

        public List<WeeklyPlan> getWeeklyPlans() {
            return weeklyPlans;
        }

        public void setWeeklyPlans(List<WeeklyPlan> weeklyPlans) {
            this.weeklyPlans = weeklyPlans;
        }

        public List<PostCalendarItem> getPostCalendar() {
            return postCalendar;
        }

        public void setPostCalendar(List<PostCalendarItem> postCalendar) {
            this.postCalendar = postCalendar;
        }
    }

    public static class WeeklyPlan {
        private Integer weekNumber;
        private List<String> mainThemes;
        private String contentRecommendations;
        private List<String> priorityPlatforms;

        public WeeklyPlan() {
        }

        public WeeklyPlan(Integer weekNumber, List<String> mainThemes, String contentRecommendations,
                List<String> priorityPlatforms) {
            this.weekNumber = weekNumber;
            this.mainThemes = mainThemes;
            this.contentRecommendations = contentRecommendations;
            this.priorityPlatforms = priorityPlatforms;
        }

        public Integer getWeekNumber() {
            return weekNumber;
        }

        public void setWeekNumber(Integer weekNumber) {
            this.weekNumber = weekNumber;
        }

        public List<String> getMainThemes() {
            return mainThemes;
        }

        public void setMainThemes(List<String> mainThemes) {
            this.mainThemes = mainThemes;
        }

        public String getContentRecommendations() {
            return contentRecommendations;
        }

        public void setContentRecommendations(String contentRecommendations) {
            this.contentRecommendations = contentRecommendations;
        }

        public List<String> getPriorityPlatforms() {
            return priorityPlatforms;
        }

        public void setPriorityPlatforms(List<String> priorityPlatforms) {
            this.priorityPlatforms = priorityPlatforms;
        }
    }

    public static class PostCalendarItem {
        private LocalDateTime publishDate;
        private Integer weekNumber;
        private String platform;
        private String contentType;
        private String theme;
        private String postText;
        private List<String> hashtags;
        private String publishTime;
        private String imageUrl;
        private String imageFilename;
        private String taskId;
        private String taskStatus;
        private String videoUrl;
        private String videoFilename;

        public PostCalendarItem() {
        }

        public PostCalendarItem(LocalDateTime publishDate, Integer weekNumber, String platform, String contentType,
                String theme,
                String postText, List<String> hashtags, String publishTime) {
            this.publishDate = publishDate;
            this.weekNumber = weekNumber;
            this.platform = platform;
            this.contentType = contentType;
            this.theme = theme;
            this.postText = postText;
            this.hashtags = hashtags;
            this.publishTime = publishTime;
        }

        public LocalDateTime getPublishDate() {
            return publishDate;
        }

        public void setPublishDate(LocalDateTime publishDate) {
            this.publishDate = publishDate;
        }

        public Integer getWeekNumber() {
            return weekNumber;
        }

        public void setWeekNumber(Integer weekNumber) {
            this.weekNumber = weekNumber;
        }

        public String getPlatform() {
            return platform;
        }

        public void setPlatform(String platform) {
            this.platform = platform;
        }

        public String getContentType() {
            return contentType;
        }

        public void setContentType(String contentType) {
            this.contentType = contentType;
        }

        public String getTheme() {
            return theme;
        }

        public void setTheme(String theme) {
            this.theme = theme;
        }

        public String getPostText() {
            return postText;
        }

        public void setPostText(String postText) {
            this.postText = postText;
        }

        public List<String> getHashtags() {
            return hashtags;
        }

        public void setHashtags(List<String> hashtags) {
            this.hashtags = hashtags;
        }

        public String getPublishTime() {
            return publishTime;
        }

        public void setPublishTime(String publishTime) {
            this.publishTime = publishTime;
        }

        public String getImageUrl() {
            return imageUrl;
        }

        public void setImageUrl(String imageUrl) {
            this.imageUrl = imageUrl;
        }

        public String getImageFilename() {
            return imageFilename;
        }

        public void setImageFilename(String imageFilename) {
            this.imageFilename = imageFilename;
        }

        public String getTaskId() {
            return taskId;
        }

        public void setTaskId(String taskId) {
            this.taskId = taskId;
        }

        public String getTaskStatus() {
            return taskStatus;
        }

        public void setTaskStatus(String taskStatus) {
            this.taskStatus = taskStatus;
        }

        public String getVideoUrl() {
            return videoUrl;
        }

        public void setVideoUrl(String videoUrl) {
            this.videoUrl = videoUrl;
        }

        public String getVideoFilename() {
            return videoFilename;
        }

        public void setVideoFilename(String videoFilename) {
            this.videoFilename = videoFilename;
        }
    }
}
