import { coloredToast } from '@/lib/toast';

interface Article {
    title: string;
    slug: string;
    description: string;
    thumbnail: string;
    post_date: Date;
    status: string;
    headline: string;
    content: string;
}

export const SaveArticle = (articleForm: Article) => {
    const validationError = validateInput(articleForm);

    if (validationError) {
        coloredToast('warning', validationError);
        return { status: false };
    }

    const data = {
        title: articleForm.title,
        slug: articleForm.slug,
        description: articleForm.description,
        thumbnail: articleForm.thumbnail,
        post_date: articleForm.post_date,
        status: articleForm.status,
        headline: articleForm.headline,
        content: articleForm.content,
    };

    return {
        status: true,
        data,
    };
};

const validateInput = (articleForm: Article): string | null => {
    if (!articleForm.title) {
        return 'Article title is required.';
    }
    if (!articleForm.slug) {
        return 'Article slug is required.';
    }
    if (articleForm.slug.includes(' ')) {
        return 'Article slug cannot contain space';
    }
    if (!articleForm.description) {
        return 'Article description is required.';
    }
    if (!articleForm.thumbnail) {
        return 'Article thumbnail is required.';
    }
    if (!articleForm.post_date) {
        return 'Article post date is required.';
    }
    if (!articleForm.status) {
        return 'Article status  is required.';
    }

    const headlineWithoutTags = articleForm.headline.replace(/<[^>]*>/g, '');
    const hadlineIsNotEmpty = headlineWithoutTags.trim().length > 0;

    if (!hadlineIsNotEmpty || !articleForm.headline) {
        return 'Article headline  is required.';
    }

    const contentWithoutTags = articleForm.content.replace(/<[^>]*>/g, '');
    const contentIsNotEmpty = contentWithoutTags.trim().length > 0;
    if (!contentIsNotEmpty || !articleForm.content) {
        return 'Article content  is required.';
    }

    return null;
};
