from datetime import date
import json

class User:    

    def __init__(dog, image, link, name, uid, breed, sex, dob, price):
        dog._image = image
        dog._link = link
        dog._name = name    # variables with dog prefix become part of the object, 
        dog._uid = uid
        dog._breed = breed
        dog._sex = sex 
        dog._dob = dob
        dog._price = price
    
    @property
    def image(dog):
        return dog._image
    
    # a setter function, allows name to be updated after initial object creation
    @image.setter
    def image(dog, image):
        dog._image = image

    @property
    def link(dog):
        return dog._link
    
    # a setter function, allows name to be updated after initial object creation
    @link.setter
    def link(dog, link):
        dog._link = link
        
    @property
    def name(dog):
        return dog._name
    
    # a setter function, allows name to be updated after initial object creation
    @name.setter
    def name(dog, name):
        dog._name = name
    
    # a getter method, extracts email from object
    @property
    def uid(dog):
        return dog._uid
    
    # a setter function, allows name to be updated after initial object creation
    @uid.setter
    def uid(dog, uid):
        dog._uid = uid
        
    # check if uid parameter matches user id in object, return boolean
    def is_uid(dog, uid):
        return dog._uid == uid
    
    @property
    def breed(dog):
        return dog._breed
    
    # a setter function, allows name to be updated after initial object creation
    @breed.setter
    def breed(dog, breed):
        dog._breed = breed
        
    @property
    def sex(dog):
        return dog._sex
    
    # a setter function, allows name to be updated after initial object creation
    @sex.setter
    def sex(dog, sex):
        dog._breed = sex
        
    # dob property is returned as string, to avoid unfriendly outcomes
    @property
    def dob(dog):
        dob_string = dog._dob.strftime('%m-%d-%Y')
        return dob_string
    
    # dob should be have verification for type date
    @dob.setter
    def dob(dog, dob):
        dog._dob = dob
        
    # age is calculated and returned each time it is accessed
    @property
    def age(dog):
        today = date.today()
        return today.year - dog._dob.year- ((today.month, today.day) < (dog._dob.month, dog._dob.day))
    
    #getter
    @property
    def price(dog):
        return dog._price
    
    #setter
    @price.setter
    def price(dog, price):
        dog._price = price
        
    # dictionary is customized, removing password for security purposes
    @property
    def dictionary(dog):
        dict = {
            "image" : dog.image,
            "link" : dog.link,
            "name" : dog.name,
            "uid" : dog.uid,
            "breed" : dog.breed,
            "sex" : dog.sex,
            "dob" : dog.dob,
            "age" : dog.age,
            "price": dog.price
        }
        return dict
    
    # output content using json dumps, this is ready for API response
    def __str__(dog):
        return json.dumps(dog.dictionary)
    
    # output command to recreate the object, uses attribute directly
    def __repr__(dog):
        return f'User(image={dog._image}, link={dog._link}, name={dog._name}, uid={dog._uid}, breed={dog._breed}, dob={dog._dob}, price={dog._price})'
    

if __name__ == "__main__":
    u1 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/cc7c5dd6a09649e3bf5c6bca96b21daa-1670625496-1670625511-jpg/1024-0-', 'https://haeryny.github.io/teamteam/doginfo/', name='Joe', uid='81729', breed='Labrador Retriever Blend', sex='male', dob=date(2022, 2, 11), price='$200')
    u2 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/672cb9b41e7548f68316d4a328c772d2-1673989499-1673989524-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Bean', uid='83792', breed='Shepherd-Rottweiler Blend', sex="male", dob=date(2019, 1, 31), price='$180')
    u3 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/9f57a9ccb04d489c8e0faeb7a6aaecc1-1671755085-1671755107-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Harry', uid='80032', breed='Hound-Terrier Blend', sex= "male", dob=date(2020, 4, 29), price='$160')
    u4 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/7a0fd8c5107f469a8b6e3ec6db1bc48a-1671827148-1671827194-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Honey', uid='90276', breed='Retriever Blend', sex= "female", dob=date(2021, 11, 1), price='$200')
    u5 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/3b17d9a97b4e41ff984e54467d122820-1670895829-1670895970-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='George', uid='90277', breed='Retriever Blend', sex= "male", dob=date(2021, 11, 1), price='$200')
    u6 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/574b155c13f5453093faa9a9bbe6cc09-1672428396-1672428453-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Julie', uid='91236', breed='Black Mouth Cur Blend', sex= "female", dob=date(2022, 4, 9), price='$250')
    u7 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/286ffc0f2e2f4227b804656084a2eb1c-1675561494-1675561497-jpeg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Violet', uid='86327', breed='Retriever Blend', sex= "female", dob=date(2021, 6, 5), price='$198')
    u8 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/1e445a3de6a44e9ca42ff1f36da4a9b0-1674933023-1674933059-jpeg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Doug', uid='87729', breed='Shepherd Blend', sex= "male", dob=date(2018, 11, 1), price='$120')
    u9 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/7921672da5a745d497b014d1e25802eb-1673041880-1676231549-jpeg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Thor', uid='90028', breed='Retriever Blend', sex= "male", dob=date(2020, 8, 17), price='$200')
    u10 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/16890ba2d55b4d2b99b4c1149f8425c5-1675099945-1675099968-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Stark', uid='92888', breed='Doberman Pinscher Blend', sex= "male", dob=date(2020, 9, 12), price='$220')
    u11 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/da1af9aca3db4c76b250193cafbe6874-1675374061-1675374069-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Bucky', uid='94465', breed='Border Collie-Shepherd Blend', sex= "male", dob=date(2020, 9, 24), price='$140')
    u12 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/3153afbaf9ed464ab7ab05de8cc68245-1660424834-1661448994-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Wanda', uid='90992', breed='Shepherd-Husky Blend', sex= "female", dob=date(2019, 2, 1), price='$260')
    u13 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/0c5b23a621874bbcbb4af72e870f2396-1662938148-1662938165-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Tasha', uid='94327', breed='Jack Russel Terrier', sex= "female", dob=date(2019, 10, 20), price='$130')
    u14 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/d9681fb1d6ec4e718a58a6dd40e4b333-1675210646-1675558115-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Shang', uid='80786', breed='Chihuahua Short Coat', sex= "male", dob=date(2019, 8, 25), price='$140')
    u15 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/7046abe642674a07bb4ff5a8f5c44da0-1675283719-1675283745-jpeg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Parker', uid='86009', breed='Dachshund', sex= "male", dob=date(2020, 3, 9), price='$155')
    u16 = User(image='https://i0.wp.com/timesofsandiego.com/wp-content/uploads/2022/08/Beagle.jpg?ssl=1', link='https://haeryny.github.io/teamteam/doginfo/', name='Cap', uid='89322', breed='Beagle', sex= "male", dob=date(2022, 1, 11), price='$200')
    u17 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/3236e8ede81d4e44b9bf806a18464230-1666577817-1666577841-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Shuri', uid='85359', breed='American Staffordshire Terrier', sex= "female", dob=date(2022, 1, 23), price='$190')
    u18 = User(image='https://do31x39459kz9.cloudfront.net/storage/image/daddeb64a1374a75821e01893d456306-1671391639-1671391712-jpg/1024-0-', link='https://haeryny.github.io/teamteam/doginfo/', name='Musa', uid='96971', breed='American Bulldog', sex= "female", dob=date(2022, 2, 22), price='$160')
    u19 = User(image='https://www.aspcapetinsurance.com/media/2325/facts-about-maltese-dogs.jpg', link='https://haeryny.github.io/teamteam/doginfo/', name='Bloom', uid='91298', breed='Maltese', sex= "female", dob=date(2017, 12, 11), price='$110')
    u20 = User(image='https://dl5zpyw5k3jeb.cloudfront.net/organization-photos/38001/4/?bust=1516228994&width=720', link='https://haeryny.github.io/teamteam/doginfo/', name='Stella', uid='98030', breed='Cattle Dog', sex= "female", dob=date(2017, 12, 27), price='$220')
    
    
    users = [u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, u11, u12, u13, u14, u15, u16, u17, u18, u19, u20]
    
    print("Dogs in our Database: ")
    print(u1)
    print(u2)
    print(u3)
    print(u4)
    print(u5)
    print(u6)
    print(u7)
    print(u8)
    print(u9)
    print(u10)
    print(u11)
    print(u12)
    print(u13)
    print(u14)
    print(u15)
    print(u16)
    print(u17)
    print(u18)
    print(u19)
    print(u20)
    
    # print("\nJSON:\n", u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, u11, u12, u13, u14, u15, u16, u17, u18, u19, u20, "\n")
Dogs in our Database: 
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/cc7c5dd6a09649e3bf5c6bca96b21daa-1670625496-1670625511-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Joe", "uid": "81729", "breed": "Labrador Retriever Blend", "sex": "male", "dob": "02-11-2022", "age": 1, "price": "$200"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/672cb9b41e7548f68316d4a328c772d2-1673989499-1673989524-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Bean", "uid": "83792", "breed": "Shepherd-Rottweiler Blend", "sex": "male", "dob": "01-31-2019", "age": 4, "price": "$180"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/9f57a9ccb04d489c8e0faeb7a6aaecc1-1671755085-1671755107-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Harry", "uid": "80032", "breed": "Hound-Terrier Blend", "sex": "male", "dob": "04-29-2020", "age": 2, "price": "$160"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/7a0fd8c5107f469a8b6e3ec6db1bc48a-1671827148-1671827194-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Honey", "uid": "90276", "breed": "Retriever Blend", "sex": "female", "dob": "11-01-2021", "age": 1, "price": "$200"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/3b17d9a97b4e41ff984e54467d122820-1670895829-1670895970-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "George", "uid": "90277", "breed": "Retriever Blend", "sex": "male", "dob": "11-01-2021", "age": 1, "price": "$200"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/574b155c13f5453093faa9a9bbe6cc09-1672428396-1672428453-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Julie", "uid": "91236", "breed": "Black Mouth Cur Blend", "sex": "female", "dob": "04-09-2022", "age": 0, "price": "$250"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/286ffc0f2e2f4227b804656084a2eb1c-1675561494-1675561497-jpeg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Violet", "uid": "86327", "breed": "Retriever Blend", "sex": "female", "dob": "06-05-2021", "age": 1, "price": "$198"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/1e445a3de6a44e9ca42ff1f36da4a9b0-1674933023-1674933059-jpeg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Doug", "uid": "87729", "breed": "Shepherd Blend", "sex": "male", "dob": "11-01-2018", "age": 4, "price": "$120"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/7921672da5a745d497b014d1e25802eb-1673041880-1676231549-jpeg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Thor", "uid": "90028", "breed": "Retriever Blend", "sex": "male", "dob": "08-17-2020", "age": 2, "price": "$200"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/16890ba2d55b4d2b99b4c1149f8425c5-1675099945-1675099968-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Stark", "uid": "92888", "breed": "Doberman Pinscher Blend", "sex": "male", "dob": "09-12-2020", "age": 2, "price": "$220"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/da1af9aca3db4c76b250193cafbe6874-1675374061-1675374069-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Bucky", "uid": "94465", "breed": "Border Collie-Shepherd Blend", "sex": "male", "dob": "09-24-2020", "age": 2, "price": "$140"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/3153afbaf9ed464ab7ab05de8cc68245-1660424834-1661448994-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Wanda", "uid": "90992", "breed": "Shepherd-Husky Blend", "sex": "female", "dob": "02-01-2019", "age": 4, "price": "$260"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/0c5b23a621874bbcbb4af72e870f2396-1662938148-1662938165-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Tasha", "uid": "94327", "breed": "Jack Russel Terrier", "sex": "female", "dob": "10-20-2019", "age": 3, "price": "$130"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/d9681fb1d6ec4e718a58a6dd40e4b333-1675210646-1675558115-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Shang", "uid": "80786", "breed": "Chihuahua Short Coat", "sex": "male", "dob": "08-25-2019", "age": 3, "price": "$140"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/7046abe642674a07bb4ff5a8f5c44da0-1675283719-1675283745-jpeg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Parker", "uid": "86009", "breed": "Dachshund", "sex": "male", "dob": "03-09-2020", "age": 2, "price": "$155"}
{"image": "https://i0.wp.com/timesofsandiego.com/wp-content/uploads/2022/08/Beagle.jpg?ssl=1", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Cap", "uid": "89322", "breed": "Beagle", "sex": "male", "dob": "01-11-2022", "age": 1, "price": "$200"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/3236e8ede81d4e44b9bf806a18464230-1666577817-1666577841-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Shuri", "uid": "85359", "breed": "American Staffordshire Terrier", "sex": "female", "dob": "01-23-2022", "age": 1, "price": "$190"}
{"image": "https://do31x39459kz9.cloudfront.net/storage/image/daddeb64a1374a75821e01893d456306-1671391639-1671391712-jpg/1024-0-", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Musa", "uid": "96971", "breed": "American Bulldog", "sex": "female", "dob": "02-22-2022", "age": 0, "price": "$160"}
{"image": "https://www.aspcapetinsurance.com/media/2325/facts-about-maltese-dogs.jpg", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Bloom", "uid": "91298", "breed": "Maltese", "sex": "female", "dob": "12-11-2017", "age": 5, "price": "$110"}
{"image": "https://dl5zpyw5k3jeb.cloudfront.net/organization-photos/38001/4/?bust=1516228994&width=720", "link": "https://haeryny.github.io/teamteam/doginfo/", "name": "Stella", "uid": "98030", "breed": "Cattle Dog", "sex": "female", "dob": "12-27-2017", "age": 5, "price": "$220"}