import unittest
from unittest import mock
import vcr

from steam import webapi
from steam.webapi import WebAPI
from steam.enums import EType, EUniverse

# setup VCR
def scrub_req(r):
    r.headers.pop('Cookie', None)
    r.headers.pop('Date', None)
    return r
def scrub_resp(r):
    r['headers'].pop('Set-Cookie', None)
    r['headers'].pop('Date', None)
    r['headers'].pop('Expires', None)
    return r

# https://steamcommunity.com/dev/apikey
test_api_key = 'test_api_key'

test_vcr = vcr.VCR(
    record_mode='none',  # change to 'new_episodes' when recording
    serializer='yaml',
    filter_query_parameters=['key'],
    filter_post_data_parameters=['key'],
    cassette_library_dir='vcr',
    before_record_request=scrub_req,
    before_record_response=scrub_resp,
)

class TCwebapi(unittest.TestCase):
    @test_vcr.use_cassette('webapi.yaml')
    def setUp(self):
        self.api = WebAPI(test_api_key)
        self.api.session.headers['Accept-Encoding'] = 'identity'

    def test_docs(self):
        self.assertTrue(len(self.api.doc()) > 0)

    @test_vcr.use_cassette('webapi.yaml')
    def test_simple_api_call(self):
        resp = self.api.ISteamWebAPIUtil.GetServerInfo_v1()
        self.assertTrue('servertime' in resp)

    @test_vcr.use_cassette('webapi.yaml')
    def test_simple_api_call_vdf(self):
        resp = self.api.ISteamWebAPIUtil.GetServerInfo(format='vdf')
        self.assertTrue('servertime' in resp['response'])

    @test_vcr.use_cassette('webapi.yaml')
    def test_resolve_vanity(self):
        resp = self.api.ISteamUser.ResolveVanityURL(vanityurl='valve', url_type=2)
        self.assertEqual(resp['response']['steamid'], '103582791429521412')

    @test_vcr.use_cassette('webapi.yaml')
    def test_post_publishedfile(self):
        resp = self.api.ISteamRemoteStorage.GetPublishedFileDetails(itemcount=5, publishedfileids=[1,1,1,1,1])
        self.assertEqual(resp['response']['resultcount'], 5)

    @test_vcr.use_cassette('webapi.yaml')
    def test_get(self):
        resp = webapi.get('ISteamUser', 'ResolveVanityURL', 1,
                           session=self.api.session, params={
                               'key': test_api_key,
                               'vanityurl': 'valve',
                               'url_type': 2,
                               })
        self.assertEqual(resp['response']['steamid'], '103582791429521412')

    @test_vcr.use_cassette('webapi.yaml')
    def test_post(self):
        resp = webapi.post('ISteamRemoteStorage', 'GetPublishedFileDetails', 1,
                           session=self.api.session, params={
                               'key': test_api_key,
                               'itemcount': 5,
                               'publishedfileids': [1,1,1,1,1],
                               })
        self.assertEqual(resp['response']['resultcount'], 5)
