# Copyright (C) 2021 Nippon Telegraph and Telephone Corporation
# All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

import os
import pickle
import sys


class SampleScript(object):

    def __init__(self, req, inst, grant_req, grant, csar_dir,
                 user_script_err_handling_data):
        self.req = req
        self.inst = inst
        self.grant_req = grant_req
        self.grant = grant
        self.csar_dir = csar_dir
        self.user_script_err_handling_data = user_script_err_handling_data

    def instantiate_start(self):
        pass

    def instantiate_end(self):
        pass

    def terminate_start(self):
        pass

    def terminate_end(self):
        pass


def main():
    script_dict = pickle.load(sys.stdin.buffer)

    operation = script_dict['operation']
    req = script_dict['request']
    inst = script_dict['vnf_instance']
    grant_req = script_dict['grant_request']
    grant = script_dict['grant_response']
    csar_dir = script_dict['tmp_csar_dir']
    user_script_err_handling_data = script_dict[
        'user_script_err_handling_data']

    script = SampleScript(req, inst, grant_req, grant, csar_dir,
                          user_script_err_handling_data)
    try:
        getattr(script, operation)()
    except AttributeError:
        output_dict = {}
        sys.stdout.buffer.write(pickle.dumps(output_dict))
        sys.stdout.flush()
        raise Exception("{} is not included in the script.".format(operation))

    output_dict = {}
    sys.stdout.buffer.write(pickle.dumps(output_dict))
    sys.stdout.flush()


if __name__ == "__main__":
    try:
        main()
        os._exit(0)
    except Exception as ex:
        sys.stderr.write(str(ex))
        sys.stderr.flush()
        os._exit(1)
