"""
Project:    PARTS Website
Author:     Edward Middleton-Smith
            Precision And Research Technology Systems Limited

Technology: Backend
Feature:    User Form

Description:
Defines Flask-WTF form for handling user input on User page.
"""

# IMPORTS
# internal
from business_objects.base import Base
# from business_objects.user.user import User # Circular
from helpers.helper_app import Helper_App
# from models.model_view_store import Model_View_Store # circular
# from models.model_view_base import Model_View_Base
from forms.base import Form_Base
import lib.argument_validation as av
# external
from flask import Flask, render_template, request, flash, redirect, url_for, current_app
from flask_wtf import FlaskForm
from wtforms import SelectField, BooleanField, StringField, SubmitField
from wtforms.validators import DataRequired, Email, ValidationError
import markupsafe
from flask_wtf.recaptcha import RecaptchaField
from abc import ABCMeta, abstractmethod
import json

class Filters_User(Form_Base):
    search = StringField(
        'Search'
    )
    active_only = BooleanField(
          'Active'
        , default = True
    )

    @classmethod
    def from_json(cls, json):
        _m = f'{cls.__qualname__}.from_json'
        # Helper_App.console_log(f'{_m}\njson: {json}')
        filters = cls()
        filters.search.data = json[Base.FLAG_SEARCH]
        filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json')
        return filters

    def to_json(self):
        return {
              Base.FLAG_SEARCH: self.search.data
            , Base.FLAG_ACTIVE_ONLY: self.active_only.data
        }

