using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Questionable.Model.Questing;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
using static Questionable.QuestPathGenerator.RoslynShortcuts;

namespace Questionable.QuestPathGenerator.RoslynElements;

internal static class DialogueChoiceExtensions
{
    public static ExpressionSyntax ToExpressionSyntax(this DialogueChoice dialogueChoice)
    {
        DialogueChoice emptyChoice = new();
        return ObjectCreationExpression(
                IdentifierName(nameof(DialogueChoice)))
            .WithInitializer(
                InitializerExpression(
                    SyntaxKind.ObjectInitializerExpression,
                    SeparatedList<ExpressionSyntax>(
                        SyntaxNodeList(
                            Assignment<EDialogChoiceType?>(nameof(DialogueChoice.Type), dialogueChoice.Type,
                                    null)
                                .AsSyntaxNodeOrToken(),
                            Assignment(nameof(DialogueChoice.ExcelSheet), dialogueChoice.ExcelSheet,
                                    emptyChoice.ExcelSheet)
                                .AsSyntaxNodeOrToken(),
                            Assignment(nameof(DialogueChoice.Prompt), dialogueChoice.Prompt,
                                    emptyChoice.Prompt)
                                .AsSyntaxNodeOrToken(),
                            Assignment(nameof(DialogueChoice.Yes), dialogueChoice.Yes, emptyChoice.Yes)
                                .AsSyntaxNodeOrToken(),
                            Assignment(nameof(DialogueChoice.Answer), dialogueChoice.Answer,
                                    emptyChoice.Answer)
                                .AsSyntaxNodeOrToken(),
                            Assignment(nameof(DialogueChoice.PromptIsRegularExpression),
                                    dialogueChoice.PromptIsRegularExpression,
                                    emptyChoice.PromptIsRegularExpression)
                                .AsSyntaxNodeOrToken(),
                            Assignment(nameof(DialogueChoice.AnswerIsRegularExpression),
                                    dialogueChoice.AnswerIsRegularExpression,
                                    emptyChoice.AnswerIsRegularExpression)
                                .AsSyntaxNodeOrToken(),
                            Assignment(nameof(DialogueChoice.DataId), dialogueChoice.DataId,
                                    emptyChoice.DataId)
                                .AsSyntaxNodeOrToken()))));
    }
}