//
// officegen: pptx speakernotes plugin tests
//
// Please put here all the pptx speakernotes plugin tests.
//
// Copyright (c) 2013 Ziv Barber;
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//

var assert = require('assert')
var officegen = require('../')
var fs = require('fs')
var path = require('path')

var outDir = path.join(__dirname, '../tmp/')

// Common error method:
var onError = function(err) {
  console.log(err)
  assert(false)
}

describe('PPTX Speaker Notes plugin', function() {
  this.slow(2000)

  before(function(done) {
    fs.mkdir(outDir, 0o777, function(err) {
      if (err) {
      } // Endif.

      done()
    })
  })

  it('creates a presentation with one speaker note', function(done) {
    var slide
    var pptx = officegen('pptx')
    pptx.on('error', onError)

    pptx.setDocTitle('Testing Speaker Notes')

    //
    // Slide #1:
    //

    slide = pptx.makeNewSlide()

    slide.name = 'Title to the slide?'

    // Change the background color:
    slide.back = '000000'

    // Declare the default color to use on this slide:
    slide.color = 'ffffff'

    // Add some text:
    slide.addText(
      'Created using Officegen version ' + officegen.version,
      0,
      0,
      '80%',
      20
    )

    //
    // Slide #2:
    //

    slide = pptx.makeNewSlide()

    // Change the background color:
    slide.back = '22c0e7'

    // Declare the default color to use on this slide:
    slide.color = '000000'

    // Add some text:
    slide.addText('Just another one', 0, 0, '100%', 20)

    //
    // Slide #3:
    //

    slide = pptx.makeNewSlide()

    // Change the background color:
    slide.back = 'e7bb22'

    // Declare the default color to use on this slide:
    slide.color = '000000'

    // Add some text:
    slide.addText('This one has a speaker note', 0, 0, '100%', 20)

    // Add a speaker note:
    slide.setSpeakerNote(
      'This is a speaker note! Using the new setSpeakerNote feature of the slide API.'
    )

    //
    // Slide #4:
    //

    slide = pptx.makeNewSlide()

    // Change the background color:
    slide.back = 'e7db19'

    // Declare the default color to use on this slide:
    slide.color = '000000'

    // Add some text:
    slide.addText('This one has a speaker note with 2 lines', 0, 0, '100%', 20)

    // Add a speaker note:
    // slide.setSpeakerNote ( 'This is a speaker note!\nUsing the new setSpeakerNote feature of the slide API.' )
    slide.setSpeakerNote('This is a speaker note!')
    slide.setSpeakerNote(
      'Using the new setSpeakerNote feature of the slide API.',
      true
    )

    //
    // Slide #5:
    //

    slide = pptx.makeNewSlide()

    // Change the background color:
    slide.back = '2fe722'

    // Declare the default color to use on this slide:
    slide.color = '000000'

    // Add some text:
    slide.addText('Just another slide', 0, 0, '100%', 20)

    //
    // Generate the pptx file:
    //

    var outFilename = 'test-ppt-notes-1.pptx'
    var out = fs.createWriteStream(path.join(outDir, outFilename))
    pptx.generate(out)
    out.on('close', function() {
      done()
    })
  })
})
