#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Description:  Automatically mark a video (movie, show, season, or episode)
#               as played in Plex for specific users.
# Author:       /u/SwiftPanda16
# Requires:     plexapi
#
# Tautulli script trigger:
#    * Notify on watched
# Tautulli script conditions:
#    * Condition {1}:
#        [ Username | is | <from username> ]
#    * Condition {2} (optional):
#        [ Library Name | is | DVR ]
# Tautulli script arguments:
#    * Watched:
#        --rating_key {rating_key} --users "<to username2>" "<to username3>"

import argparse
import os
from plexapi.server import PlexServer
from plexapi.video import Video

PLEX_URL = ''
PLEX_TOKEN = ''

# Environmental Variables
PLEX_URL = os.getenv('PLEX_URL', PLEX_URL)
PLEX_TOKEN = os.getenv('PLEX_TOKEN', PLEX_TOKEN)


def mark_watched(plex, rating_key, users):
    admin = plex.myPlexAccount().username.lower()
    for user in users:
        server = plex if user.lower() == admin else plex.switchUser(user)
        item = server.fetchItem(rating_key)
        if isinstance(item, Video):
            print(f'Marking {item.title} as watched for {user}.')
            item.markWatched()


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--rating_key', required=True, type=int)
    parser.add_argument('--users', required=True, nargs='+')
    opts = parser.parse_args()

    plex = PlexServer(PLEX_URL, PLEX_TOKEN)
    mark_watched(plex, **vars(opts))