import React from 'react';
import BlogWizard from '@/features/blog/components/BlogWizard';
import { newBlog, generateBlogPost, updateBlogPost, publishBlogPost, fetchBlogTopicSuggestions } from '@/features/blog/api/blogService';
import { uploadBlogFile, generateBlogPostImage } from '@/shared/api/fileService';
import { toast } from 'sonner';

interface BlogWizardContainerProps {
  onComplete: () => void;
}

const BlogWizardContainer: React.FC<BlogWizardContainerProps> = ({ onComplete }) => {
  const handleNewBlog = async () => {
    const id = await newBlog();
    if (!id) throw new Error('Konnte keinen neuen Blog erstellen');
    return id;
  };

  const handleGenerate = async (args: { blog_Id: string; topic: string; tonality: string; languages: string[]; }) => {
    try {
      const res = await generateBlogPost(args);
      return res;
    } catch (err) {
      toast.error('Fehler beim Generieren des Blogbeitrags');
      throw err;
    }
  };

  const handleUpdate = async (args: { blogId: string; content: any; }) => {
    try {
      const res = await updateBlogPost(args);
      toast.success('Änderungen erfolgreich gespeichert');
      return res;
    } catch (err) {
      toast.error('Fehler beim Speichern der Änderungen');
      throw err;
    }
  };

  const handlePublish = async (args: {
    blogId: string;
    publishDate?: string;
    publishToSocialMedia: boolean;
    socialMediaChannels: string[];
    socialMediaLanguages: string[];
  }) => {
    try {
      const res = await publishBlogPost(args);
      toast.success(args.publishDate ? 'Blog erfolgreich geplant' : 'Blog erfolgreich veröffentlicht');
      onComplete?.();
      return res;
    } catch (err) {
      toast.error('Fehler beim Veröffentlichen des Blogbeitrags');
      throw err;
    }
  };

  const handleFetchSuggestions = async (): Promise<string[] | null> => {
    try {
      const suggestions = await fetchBlogTopicSuggestions();
      return suggestions;
    } catch (err) {
      toast.error('Fehler beim Laden der Themenvorschläge');
      return null;
    }
  };

  const handleUploadFile = async (file: File, blogId: string) => {
    try {
      const res = await uploadBlogFile(file, blogId);
      if (!res.success) throw new Error(res.message);
      return res;
    } catch (err) {
      toast.error('Fehler beim Hochladen der Datei');
      throw err;
    }
  };

  const handleGenerateImage = async (blogId: string, title: string) => {
    try {
      const res = await generateBlogPostImage(blogId, title);
      if (!res.success) throw new Error(res.message);
      return res;
    } catch (err) {
      toast.error('Fehler beim Generieren des Bildes');
      throw err;
    }
  };

  return (
    <BlogWizard
      onComplete={onComplete}
      onNewBlog={handleNewBlog}
      onGenerate={handleGenerate}
      onUpdate={handleUpdate}
      onPublish={handlePublish}
      onFetchSuggestions={handleFetchSuggestions}
      onUploadFile={handleUploadFile}
      onGenerateImage={handleGenerateImage}
    />
  );
};

export default BlogWizardContainer;
