import axios from 'axios';
import { BlogPost } from '@/types/blog';
import { processBlogPost } from './blogUtils';

// Note: We're not using a base URL here since we need different domains for different endpoints
const api = axios.create({
  timeout: 10000,
});

// Generate random dates in the past year
const getRandomDate = (): string => {
  const now = new Date();
  const yearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate());
  const randomTime = yearAgo.getTime() + Math.random() * (now.getTime() - yearAgo.getTime());
  return new Date(randomTime).toISOString();
};

const DOMAIN_BLOG = process.env.NEXT_PUBLIC_BLOG_API_URL || 'https://accountant.aktivrs.com'

export const blogApi = {
  // Fetch all blog posts
  getPosts: async (): Promise<BlogPost[]> => {
    console.log('Fetching blog posts from:', DOMAIN_BLOG + '/api/blogs')
    try {
      const response = await api.get(DOMAIN_BLOG + '/api/blogs');
      console.log('Blog API response:', response.data);
      console.log('API response length:', response.data.length);

      const mappedData = response.data
        // .slice(0, 20) // Limit to first 20 posts for better performance
        .map((post: any) => processBlogPost(post, DOMAIN_BLOG));

      console.log('Mapped data:', mappedData);
      console.log('Mapped data length:', mappedData.length);

      return mappedData;
    } catch (error) {
      console.error('Error fetching posts from', DOMAIN_BLOG + '/api/blogs', ':', error);
      if (axios.isAxiosError(error)) {
        console.error('Axios error details:', {
          status: error.response?.status,
          statusText: error.response?.statusText,
          data: error.response?.data
        });
        throw new Error(`Failed to fetch posts: ${error.message}`);
      }
      throw new Error('Failed to fetch posts');
    }
  },

  // Fetch single blog post by ID
  getPost: async (id: number): Promise<BlogPost> => {
    console.log('Fetching blog post from:', DOMAIN_BLOG + `/api/blogs/${id}`)
    try {
      const response = await api.get(DOMAIN_BLOG + `/api/blogs/${id}`);
      const post = response.data;
      console.log('Single blog post response:', post);

      return processBlogPost(post, DOMAIN_BLOG);
    } catch (error) {
      console.error('Error fetching post:', error);
      if (axios.isAxiosError(error)) {
        if (error.response?.status === 404) {
          throw new Error('Post not found');
        }
        throw new Error(`Failed to fetch post: ${error.message}`);
      }
      throw new Error('Failed to fetch post');
    }
  },

  // Fetch single blog post by slug
  getPostBySlug: async (slug: string): Promise<BlogPost> => {
    console.log('Fetching blog post by slug from:', DOMAIN_BLOG + `/api/blogs/slug/${slug}`)
    try {
      const response = await api.get(DOMAIN_BLOG + `/api/blogs/slug/${slug}`);
      const post = response.data;
      console.log('Single blog post by slug response:', post);

      return processBlogPost(post, DOMAIN_BLOG);
    } catch (error) {
      console.error('Error fetching post by slug:', error);
      if (axios.isAxiosError(error)) {
        if (error.response?.status === 404) {
          throw new Error('Post not found');
        }
        throw new Error(`Failed to fetch post: ${error.message}`);
      }
      throw new Error('Failed to fetch post');
    }
  },
};