def remove_achievement(achievementID):                        
    
    #Firstly, get videoIDs
    videoID = sql.run_sql(("""SElECT VideoID FROM Video
                               WHERE InstanceRunID = (SELECT InstanceRunID From Achievement WHERE AchievementID = "%s")
                           """ %(achievementID)))
    #If video exist for this achievement
    if videoID:
        videoID = videoID[0][0]
        #Get all the viewerOrders for the video
        viewerOrders = sql.run_sql(("""SELECT ViewerOrderID FROM ViewerOrderLine WHERE VideoID = "%s" """% (videoID)))
        #Remove all ViewerOrderLine data with the VideoID
        sql.run_remove(("""DELETE FROM ViewerOrderLine WHERE VideoID = "%s"
                        """ % (videoID)))
        #Remove all ViewerOrders
        for i in viewerOrders:
            sql.run_remove(("""DELETE FROM ViewerOrder 
                WHERE ViewerOrderID = "%s"
                """ % (i[0])))   
        #finall,y remove Video
        sql.run_remove(("""DELETE FROM Video WHERE VideoID = "%s"
                        """ % (videoID)))
    #Remove Achievement    
    sql.run_remove(("""DELETE FROM Achievement 
                    WHERE AchievementID = "%s"
                    """ % (achievementID)))
    #Remove InstanceRun to keep the logic we have decided
    sql.run_remove(("""DELETE FROM InstanceRun WHERE InstanceRunID = (SELECT InstanceRunID FROM Achievement WHERE AchievementID = "%s")
                    """ % (achievementID))) 
    return
def cancelSubscription():
    sql.run_update("""UPDATE Viewer
                       SET ViewerType = "N"
                       WHERE ViewerID = "%s"
                   """%(viewerID))
    sql.run_remove("""DELETE FROM PremiumViewer WHERE ViewerID = "%s"
                   """%(viewerID))
    return
def remove_instance(instanceRunID):      
    #Get related achievements    
    sql.run_update(("""UPDATE Achievement
                        SET InstanceRunID = NULL, WhenAchieved = NULL
                        WHERE InstanceRunID = "%s"
            """ % (instanceRunID)))
    #Get related Videos
    videoID = sql.run_sql(("""SELECT VideoID FROM Video WHERE InstanceRunID = "%s" """ % (instanceRunID)))
    if videoID:
        videoID = videoID[0][0]
        #Remove all viewerOrders for that video
        viewerOrders = sql.run_sql(("""SELECT ViewerOrderID FROM ViewerOrderLine WHERE VideoID = "%s" """% (videoID)))
        sql.run_remove(("""DELETE FROM ViewerOrderLine WHERE VideoID = "%s"
                        """ % (videoID)))
        for i in viewerOrders:
            sql.run_remove(("""DELETE FROM ViewerOrder 
                WHERE ViewerOrderID = "%s"
                """ % (i[0])))   
        #Delete Video
        sql.run_remove(("""DELETE FROM Video WHERE VideoID = "%s"
                        """ % (videoID))) 
    #Delete instaceRun
    sql.run_remove(("""DELETE FROM InstanceRun WHERE InstanceRunID= "%s"
                    """ % (instanceRunID)))                              
    return
def delete_video(videoID):

    viewerOrders = sql.run_sql(("""SELECT ViewerOrderID FROM ViewerOrderLine WHERE VideoID = "%s" """
                               % (videoID)))
    
    sql.run_remove(("""DELETE FROM ViewerOrderLine WHERE VideoID = "%s"
                    """ % (videoID)))
    for i in viewerOrders:
        sql.run_remove(("""DELETE FROM ViewerOrder 
            WHERE ViewerOrderID = "%s"
            """ % (i[0])))   

    sql.run_remove(("""DELETE FROM Achievement 
                    WHERE InstanceRunID = (SELECT InstanceRunID FROM Video WHERE VideoID = "%s")
                    """ % (videoID)))
    sql.run_remove(("""DELETE FROM Video WHERE VideoID = "%s"
                    """ % (videoID))) 
    sql.run_remove(("""DELETE FROM InstanceRun WHERE InstanceRunID = (SELECT InstanceRunID FROM Video WHERE VideoID = "%s")
                    """ % (videoID))) 
    return
def remove_viewer(viewerID):

    sql.run_remove(("""DELETE FROM CrowdFundingViewer WHERE ViewerID = "%s"
                   """% (viewerID)))
    sql.run_remove(("""DELETE FROM PremiumViewer WHERE ViewerID = "%s"
                   """% (viewerID)))                                    
    addressIDs = sql.run_sql(("""SELECT AddressID FROM ViewerAddress 
        WHERE ViewerID = "%s" 
        AND AddressID NOT IN (SELECT AddressID FROM ViewerAddress WHERE ViewerID != "%s")
        AND AddressID NOT IN (SELECT DISTINCT(AddressID) FROM PlayerAddress)
        """ %(viewerID,viewerID)))                                        
    sql.run_remove(("""DELETE FROM ViewerAddress WHERE ViewerID = "%s"
                    """ % (viewerID)))
    for i in addressIDs:
        sql.run_remove(("""DELETE FROM Address WHERE AddressID = "%s"
            """ % (i[0])))
    orderIDs = sql.run_sql(("""SELECT ViewerOrderID FROM ViewerOrder WHERE ViewerID = "%s"
                    """ % (viewerID)))  
    for i in orderIDs:
        sql.run_remove(("""DELETE FROM ViewerOrderLine WHERE ViewerOrderID = "%s"
            """ % (i[0])))            
    sql.run_remove(("""DELETE FROM ViewerOrder WHERE ViewerID = "%s"
                    """ % (viewerID)))                              
    sql.run_remove(("""DELETE FROM ViewerLogin WHERE ViewerID = "%s"
                    """ % (viewerID)))     
    sql.run_remove(("""DELETE FROM Viewer WHERE ViewerID = "%s"
                    """ % (viewerID)))     
    return
def delete_game(gameID):
    videoID = sql.run_sql("""SELECT VideoID FROM Video WHERE GameID = %s"""%gameID)
    if videoID:
        delete_video(videoID[0][0])
    sql.run_remove(("""DELETE FROM Game WHERE GameID = "%s" """%gameID))
    return