using System;
using System.Collections.Generic;
using System.IO;
using Aspose.Words.Cloud.Sdk;
using Aspose.Words.Cloud.Sdk.Model;
using Aspose.Words.Cloud.Sdk.Model.Requests;

namespace WordsSample.Words
{
    public class WordFileOperations
    {
        public void AppendDocument()
        {
            try
            {
                var wordsApi = new WordsApi("id", "secret");
                var request = new AppendDocumentRequest();
                request.Name = "input.docx";
                using (var stream = File.OpenRead("input.docx"))
                {
                    wordsApi.UploadFile(new UploadFileRequest(stream, "input.docx")).GetAwaiter().GetResult();
                }
                request.DocumentList = new DocumentEntryList()
                {
                    DocumentEntries = new List<DocumentEntry>() {
                        new DocumentEntry()
                        {
                            ImportFormatMode = DocumentEntry.ImportFormatModeEnum.UseDestinationStyles,
                            FileReference = new FileReference(File.OpenRead("append1.docx"))
                        },
                        new DocumentEntry()
                        {
                            ImportFormatMode = DocumentEntry.ImportFormatModeEnum.UseDestinationStyles,
                            FileReference = new FileReference(File.OpenRead("append2.docx"))
                        }
                    }
                };
                request.DestFileName = "output.docx";
                var task = wordsApi.AppendDocument(request);
                task.Wait();
                var result = task.Result;


                var downloadFileTask = wordsApi.DownloadFile(new DownloadFileRequest(result.Document.FileName));

                var outputFileStream = downloadFileTask.Result;

                outputFileStream.Position = 0;

                using (var fileStream = File.Create(result.Document.FileName))
                {
                    outputFileStream.Seek(0, SeekOrigin.Begin);
                    outputFileStream.CopyTo(fileStream);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}