from __future__ import print_function

from sys import stderr

from sqlalchemy.exc import SQLAlchemyError
from movies import MovieDatabase, Movie

from kivy.app import App


__app_package__ = 'edu.unl.cse.soft161.movies'
__app__ = 'Movies'
__version__ = '1.0'
__flags__ = ['--bootstrap=sdl2', '--requirements=python2,kivy,sqlalchemy,mysql_connector', '--permission=INTERNET']


class MoviesApp(App):
    def __init__(self, **kwargs):
        super(MoviesApp, self).__init__(**kwargs)
        url = MovieDatabase.construct_mysql_url('localhost', 3306, 'movies', 'root', 'cse')
        self.movie_database = MovieDatabase(url)
        self.session = self.movie_database.create_session()

    @staticmethod
    def _create_movie(session, title, budget, gross_revenue):
        movie = Movie(title=title, budget=budget, gross_revenue=gross_revenue)
        session.add(movie)
        session.commit()

    def create_movie(self, title, budget, gross_revenue):
        try:
            budget = int(budget) * 1000000
            gross_revenue = int(gross_revenue) * 1000000
        except ValueError as exception:
            self.root.ids.message.text = 'Formatting error: {exception}'.format(exception=exception)
            return
        try:
            self._create_movie(self.session, title, budget, gross_revenue)
            self.root.ids.message.text = 'Movie added!'
        except SQLAlchemyError as exception:
            self.session.rollback()
            self.root.ids.message.text = 'Database error: {exception}'.format(exception=exception)


if __name__ == "__main__":
    try:
        app = MoviesApp()
        app.run()
    except SQLAlchemyError as exception:
        print('Initial database connection failed!', file=stderr)
        print('Cause: {exception}'.format(exception=exception), file=stderr)
        exit(1)