
from abc import ABC, abstractmethod
from random import randint

class RequestFactory(ABC):
    @abstractmethod
    def create_request(self):
        pass

class RequestCreator(RequestFactory):
    def create_request(self, request_type):
        if request_type == 'pothole':
            return PotholeRequest()
        if request_type == 'streetlight':
            return StreetLightRequest()
        if request_type == 'streetcleaning':
            return StreetCleaningRequest()

class Request():
    def __init__(self):
        self.name = ''

    def submit(self):
        print('Thank you for submitting your {} request!'.format(self.name))

    def status(self):
        print('Your {} request will be fulfilled in approximately {} days!'.format(self.name, randint(1,30)))

    def close(self):
        print('Your {} request has been completed and is now closed.'.format(self.name))



class PotholeRequest(Request):
    def __init__(self):
        self.name = 'pothole'


class StreetLightRequest(Request):
    def __init__(self):
        self.name = 'street light'


class StreetCleaningRequest(Request):
    def __init__(self):
        self.name = 'street cleaning'


f = RequestCreator()
r = f.create_request('pothole')
r.submit()
r.status()
r.close()
print('\n\n')
r2 = f.create_request('streetcleaning')
r2.submit()
r2.status()
r2.close()
print('\n\n')
r3 = f.create_request('streetlight')
r3.submit()
r3.status()
r3.close()

print(type(f))
print(type(r))



