#!/usr/bin/env python

import boto3
import json


class Thing():
    def __init__(self, name):
        self.client = boto3.client('iot')
        self.name = name
        self.arn = ''

    def create(self):
        assert not self.exists(), "Thing already exists"
        result = self.client.create_thing(thingName=self.name)
        self.arn = result['thingArn']

    def delete(self):
        assert self.exists(), "Thing does not exist"
        principals = self.list_principals()
        for principal in principals:
            self.detach_principal(principal)
        self.client.delete_thing(thingName=self.name)

    def exists(self):
        list_of_things = self.client.list_things()['things']
        for thing in list_of_things:
            if thing['thingName'] == self.name:
                return True
        return False

    def attach_principal(self, arn):
        assert self.exists(), "Thing does not exist"
        self.client.attach_thing_principal(thingName=self.name, principal=arn)

    def detach_principal(self, arn):
        assert self.exists(), "Thing does not exist"
        self.client.detach_thing_principal(thingName=self.name, principal=arn)

    def list_principals(self):
        assert self.exists(), "Thing does not exist"
        principals = self.client.list_thing_principals(thingName=self.name)
        principals = principals['principals']
        return principals
