# -*- coding: utf-8 -*-

from os import listdir, remove
from os.path import isdir, isfile
from pkg_resources import resource_filename, Requirement
from unittest import TestCase
from shutil import rmtree
from tempfile import TemporaryFile, TemporaryDirectory

import google_streetview.api
import json

class apiTest(TestCase):

  def setUp(self):
    file_path = resource_filename(Requirement.parse('google_streetview'), 'google_streetview/config.json')
    with open(file_path, 'r') as in_file:
      defaults = json.load(in_file)
    params = [{
      'size': '600x300', # max 640x640 pixels
      'location': '46.414382,10.013988',
      'heading': '151.78',
      'pitch': '-0.76',
      'key': defaults['key']
    }]
    self.results = google_streetview.api.results(params)
    tempfile = TemporaryFile()
    self.tempfile = str(tempfile.name)
    tempfile.close()
    self.tempdir = str(TemporaryDirectory().name)
  
  def test_preview(self):
    results = self.results
    expected = None
    self.assertTrue(expected == results.preview())
  
  def test_download_links(self):
    self.results.download_links(self.tempdir)
    nfiles = len(listdir(self.tempdir))
    rmtree(self.tempdir)
    self.assertTrue(nfiles > 0)
  
  def test_metadata_status_ok(self):
    status = self.results.metadata[0]['status']
    expected = 'OK'
    self.assertTrue(status == expected)
  
  def test_save_links(self):
    results = self.results
    results.save_links(self.tempfile)
    with open(self.tempfile, 'r') as f:
      nlinks = len(f.readlines())
    self.assertTrue(nlinks == 1)
  
  def test_save_metadata(self):
    results = self.results
    results.save_metadata(self.tempfile)
    with open(self.tempfile, 'r') as f:    
      metadata = json.load(f)
    self.assertTrue(metadata == results.metadata)
  
  def tearDown(self):
    if isfile(self.tempfile):
      remove(self.tempfile)
    if isdir(self.tempdir):
      rmtree(self.tempdir)