#                     -*- Service Exemple -*-
# 
#   Here you can provide logic to operate the data that you want to 
# send to the client and the data that you will persist at your database.


from app.configurations.database import db
from app.models.user_model import UserModel

from flask_jwt_extended import (
    create_access_token,
    create_refresh_token
)
from datetime import timedelta


class UserService():

    @staticmethod
    def create(attrs):
        session = db.session

        password = attrs.pop("password")

        user = UserModel(**attrs)
        user.password = password

        session.add(user)
        session.commit()

        return user
        
    
    @staticmethod
    def login(attrs):
        session = db.session

        user = UserModel.query.filter_by(email=attrs.get("email")).first()

        if not user or not user.check_password(attrs.get("password")):
            raise AttributeError("Invalid credentials.")

        acess_token = create_access_token(
            identity=user.id, fresh=False, expires_delta=timedelta(days=7)
        )
        fresh_token = create_access_token(
            identity=user.id, fresh=True, expires_delta=timedelta(days=14)
        )

        return acess_token, fresh_token


    @staticmethod
    def refresh_token(user_id):
        return create_refresh_token(
                identity=user_id, expires_delta=timedelta(days=7)
            )