from flask import Flask, jsonify, request
from flask_mysqldb import MySQL
from flask_restful import Resource, Api, reqparse

app = Flask(__name__)
mysql = MySQL(app)
api = Api()

# db
app.config['MYSQL_HOST'] = '127.0.0.1'
app.config['MYSQL_USER'] = 'bempkns1_pujo'
app.config['MYSQL_PASSWORD'] = 'h)#zJ1c.35f{'
app.config['MYSQL_DB'] = 'bempkns1_newstanerid'

# user dan auth
class Akun(Resource):
    def get(self):
        try:
            cur = mysql.connection.cursor()
            cur.execute('''select * from users''')
            row_headers = [x[0] for x in cur.description]
            result = cur.fetchall()
            data = []
            for res in result:
                data.append(dict(zip(row_headers, res)))

            response = jsonify(
                {
                    'message': 'sukses',
                    'status': 200,
                    'data': data,
                })
            response.headers["Content-Type"] = "application/json"
            return response
        except Exception as e:
            print(e)
        finally:
            cur.close()

    def post(self):
        try:
            cur = mysql.connection.cursor()
            data = request.json
            cur.execute('''insert into users (email_user,password_user,nama_user,npm_user,prodi_user,tahun_user) values (%s, %s, %s, %s, %s, %s)''', (data['email_user'], data['password_user'], data['nama_user'], data['npm_user'], data['prodi_user'], data['tahun_user']))
            mysql.connection.commit()
            response = jsonify(message='Added successfully')
            response.status_code = 201
        except Exception as e:
            print(e)
            response = jsonify('Failed to add.')
            response.status_code = 400
        finally:
            cur.close()
            return(response)

class Masuk(Resource):
    def get(self, uid):
        try:
            cur = mysql.connection.cursor()
            result = cur.execute('''SELECT * FROM `users` JOIN mahasiswas ON mahasiswas.email_mahasiswa = users.email_user WHERE uid_user = %s ''', (uid,))
            row_headers = [x[0] for x in cur.description]
            result = cur.fetchall()
            data = []
            
            if len(result) == 1:
                for res in result:
                    data.append(dict(zip(row_headers, res)))

                response = jsonify(
                    {
                        'message': 'sukses',
                        'status': 200,
                        'data': data,
                    })
            else:
                response = jsonify({
                    'message': 'gagal',
                    'status': 404,
                })
                response.status_code = 404
            response.headers["Content-Type"] = "application/json"
            return response
        except Exception as e:
            print(e)
        finally:
            cur.close()

# Routes
api.add_resource(Akun, '/akun', endpoint='akun')
api.add_resource(Masuk, '/masuk/<string:uid>', endpoint='masuk')

api.init_app(app)

if __name__ == '__main__':
    app.run(debug=True, port=5050)
