from asyncio import FastChildWatcher
from dataclasses import field
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from base.models import Subscription
from magazineapp.models import*
from django.core.validators import RegexValidator
User = get_user_model()



class UserLoginForm(forms.Form):
    username = forms.CharField(max_length=255, label="Username",widget=forms.TextInput(attrs={'placeholder': 'Enter username','class':'form-control form-control-user'}))
    password = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter Password'}))
    

class UserRegisterForm(forms.ModelForm):
    first_name = forms.CharField(max_length=50, label="First Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter First Name','class':'form-control form-control-user'}))
    last_name = forms.CharField(max_length=50, label="Last Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter Last Name','class':'form-control form-control-user'}))
    email = forms.CharField(max_length=100, label="Email",widget=forms.EmailInput(attrs={'placeholder': 'Enter Email','class':'form-control form-control-user'}))
    password = forms.CharField(max_length=50,label='Password', widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter Password'}))
    confirm_password = forms.CharField(max_length=50,label='Password', widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter Confirm Password'}))
    country_val = Country.objects.all().order_by('name').values_list('id','name')
    # print(country_val,"================")
    country_id = forms.ChoiceField(choices= country_val)
    # email_verification  = forms.BooleanField(label='email_varification',required=False, widget=forms.CheckboxInput(attrs={'class':'form-control promoted_tab'}))
    # def valid(self, attrs):
    #     print('dffffffffffffffffffffff')
    #     return attrs
    
    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email','password', 'confirm_password','country_id']

    # def save(self, commit=True): # save the provided password in hashed format
    #     password = self.cleaned_data.get('password')
    #     confirm_password = self.cleaned_data.get('confirm_password')
    #     if password and confirm_password and password != confirm_password:
    #         raise forms.ValidationError('Passwords do not match')
    
    #     user = super().save(commit=False)
    #     user.set_password(self.cleaned_data['password'])
    #     if commit:
    #         user.is_active = False
    #         user.roles_id = 2
    #         user.username = self.cleaned_data.get('email')
    #         user.save()
    #     return user


class ForgotPasswordForm(forms.Form):
    forgot_password_email = forms.CharField(max_length=255, label="Email",widget=forms.EmailInput(attrs={'placeholder': 'Enter Email','class':'form-control form-control-user'}))

class ProfileForm(forms.ModelForm):
    first_name = forms.CharField(max_length=50, label="First Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter First Name','class':'form-control form-control-user'}))
    last_name = forms.CharField(max_length=50, label="Last Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter Last Name','class':'form-control form-control-user'}))
    # address=forms.CharField(max_length=50, label="Address",widget=forms.TextInput(attrs={'placeholder': 'Enter Address','class':'form-control form-control-user'}))
    phone_number=forms.CharField(max_length=16, min_length=8,label="Phone Number",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*?)\..*/g, '$1').replace(/^0[^.]/, '0');",'placeholder': 'Enter Phone Number','class':'form-control form-control-user'}))
    address=forms.CharField(max_length=100, label="Address",widget=forms.TextInput(attrs={'placeholder': 'Enter Address','class':'form-control form-control-user'}))
    address_line_2=forms.CharField(max_length=100, label="Address",widget=forms.TextInput(attrs={'placeholder': 'Enter Address','class':'form-control form-control-user'}))
    state = forms.CharField(max_length=35, label="City",widget=forms.TextInput(attrs={'onkeydown':"return /[a-z]/i.test(event.key)",'pattern':'[A-Za-z ]+','placeholder': 'Enter City','class':'form-control form-control-user'}))
    zipcode=forms.CharField(max_length=6,min_length=4,label="Zipcode",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*?)\..*/g, '$1').replace(/^0[^.]/, '0');",'placeholder': 'Enter Zipcode','class':'form-control form-control-user'}))
    city=forms.CharField(max_length=25, label="State",widget=forms.TextInput(attrs={'onkeydown':"return /[a-z]/i.test(event.key)",'placeholder': 'Enter State','class':'form-control form-control-user'}))
    # country=forms.CharField(max_length=35, label="Country",widget=forms.TextInput(attrs={'placeholder': 'Enter country','class':'form-control form-control-user'}))
    class Meta:
        model=User
        fields=['first_name','last_name','phone_number','address','address_line_2','state','city','zipcode']

class ForgetChangePasswordForm(forms.ModelForm):
    old_password = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter Old Password'}))
    password = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter New Password'}))
    confirm_password = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter Confirm Password'}))  
    class Meta:
        model=User
        fields=['old_password','password','confirm_password']    
        
class AddAuthorForm(forms.ModelForm):
    author_image = forms.ImageField(widget=forms.FileInput(attrs={'onchange':'validate3(this)',}))
    author_name = forms.CharField(required=True,max_length=35, label="Author",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter Author Name','class':'form-control form-control-user'}))
    author_age = forms.IntegerField(max_value=150, min_value=15,label="Author Age",widget=forms.NumberInput(attrs={"min":"15", "max":"150","oninput":"this.value = this.value > 150 ? 0 : Math.abs(this.value)",'placeholder': 'Enter Author Age','class':'form-control form-control-user'}))
    writing_type = forms.CharField(max_length=35, label="Author Writing Type",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'pattern':'[A-Za-z ]+','placeholder': 'Enter Writing Type','class':'form-control form-control-user'}))
    class Meta:
        model = Author
        fields = ['author_image', 'author_name', 'author_age', 'writing_type']

class AddLanguageForm(forms.ModelForm):
    language = forms.CharField(max_length=25, label="Choose Language",widget=forms.TextInput(attrs={'pattern':'[A-Za-z ]+','placeholder': 'Enter Language','class':'form-control form-control-user'}))
    class Meta:
        model = Language
        fields = ['language']

class UpdateLanguageForm(forms.ModelForm):
    class Meta:
        model = Language
        fields = '__all__'

class AddMagazineCategoryForm(forms.ModelForm):
    magazine_category_icon = forms.ImageField(widget=forms.FileInput(attrs={'onchange':'validate4(this)',}))
    category_name = forms.CharField(max_length=25, label="Category Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-ZA-Z , ]/, '')", 'pattern':'[A-Za-z ]+','placeholder': 'Enter Category Name','class':'form-control form-control-user'}))
    magazine_category_color = forms.CharField(max_length=255, label="Category Color",widget=forms.TextInput(attrs={'type': 'color','class':'form-control color'}))
    class Meta:
        model = MagazineCategory
        fields = ['category_name', 'magazine_category_color', 'magazine_category_icon']

class AddMagazineInfoForm(forms.ModelForm):
    cover_pic =  forms.ImageField(required=True,widget=forms.FileInput(attrs={'onchange':'validate2(this)',}))
    desktop_cover_pic = forms.ImageField(required=False,widget=forms.FileInput(attrs={'onchange':'readURL_Promotion(this)',}))
    name = forms.CharField(max_length=255, label="Magazine Name",widget=forms.TextInput(attrs={'placeholder': 'Enter Magazine Name','class':'form-control form-control-user'}))
    rent_price = forms.FloatField(max_value=1000000, min_value=1,label="Enter Rent Price",widget=forms.NumberInput(attrs={'placeholder': 'Enter Rent Price','class':'form-control form-control-user'}))
    buy_price = forms.FloatField(max_value=1000000, min_value=1,label="Enter Buy Price",widget=forms.NumberInput(attrs={'placeholder': 'Enter Buy Price','class':'form-control form-control-user'}))
    # system_category = forms.CharField(max_length=255, label="Choose System Category",widget=forms.TextInput(attrs={'placeholder': 'Choose System Category','class':'form-control form-control-user'}))
    # magazine_category = forms.CharField(max_length=255, label="Choose Magazine Category",widget=forms.TextInput(attrs={'placeholder': 'Choose Magazine Category','class':'form-control form-control-user'}))
    description = forms.CharField(max_length=1000,required=False ,label="Magazine Name",widget=forms.Textarea(attrs={'rows':1, 'cols':15,'placeholder': 'Enter Description(1500 words)','class':'form-control form-control-user'}))
    is_promoted  = forms.BooleanField(label='Is Promoted',required=False, widget=forms.CheckboxInput(attrs={'class':'form-control promoted_tab'}))
    background_first_color =forms.CharField(max_length=255, label="Background first Color",widget=forms.TextInput(attrs={'type': 'color','class':'form-control color'}))
    background_second_color = forms.CharField(max_length=255, required=False,label="Background Second Color",widget=forms.TextInput(attrs={'type': 'color','class':'form-control color'}))
    free_pages=forms.CharField(max_length=6, label="Free Pages",widget=forms.TextInput(attrs={'placeholder': 'Enter Free Pages','class':'form-control form-control-user'}))
    issue_date = forms.DateField(required=False,label="issue_date",widget=forms.DateInput(attrs={'type': 'date','placeholder': 'issue_date','class':'form-control form-control-user'}))
    # author = forms.ModelMultipleChoiceField(queryset=Author.objects.all(),widget=forms.SelectMultiple())
    # author_multi = forms.ModelMultipleChoiceField(queryset=Author.objects.all(),widget=forms.SelectMultiple,)
    published_date = forms.DateTimeField(required=False,label="published_date",widget=forms.DateTimeInput(attrs={'type': 'datetime-local','placeholder': 'published_date','class':'form-control form-control-user',}))
    # language = forms.CharField(max_length=255, label="language",widget=forms.TextInput(attrs={'placeholder': 'language','class':'form-control form-control-user'}))
    sku =forms.IntegerField(max_value=999999,min_value=1,label="Sku",widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'placeholder': 'Enter Sku','class':'form-control form-control-user'}))
    issues = forms.IntegerField(min_value=0,max_value=999,label="Issues",widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'placeholder': 'Enter Issues','class':'form-control form-control-user'}))
    year_available = forms.IntegerField(min_value=1,max_value=999,label="Years Available",widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'placeholder': 'Enter Years Available','class':'form-control form-control-user'}))
    umc = forms.IntegerField(max_value=999999,min_value=0,label="Umc",widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'placeholder': 'Enter Umc','class':'form-control form-control-user'}))
    cover_price = forms.FloatField(min_value=1,max_value=999999,label="Cover Price",widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'placeholder': 'Enter Cover Price','class':'form-control form-control-user'}))
    GEEKS_CHOICES =((1, "English"),)
    # language_id = forms.TypedChoiceField(choices=GEEKS_CHOICES, coerce=int, help_text = 'Units: ')
    # language_id = forms.ChoiceField(choices = GEEKS_CHOICES)
    # language_id = forms.ModelChoiceField(queryset = Language.objects.all())
    rent_date = forms.CharField(max_length=6, label="Validity",widget=forms.TextInput(attrs={'placeholder': 'Validity','class':'form-control form-control-user'}))
    comment = forms.CharField(max_length=255,label="Comment",widget=forms.TextInput(attrs={'placeholder': 'Enter Comment','class':'form-control form-control-user'}))
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['system_category'].required = True
        self.fields['magazine_category'].required = True
        self.fields['language'].required = True
        self.fields['rent_price'].required = False
        self.fields['buy_price'].required = False
        self.fields['rent_date'].required = False
        self.fields['frequency'].required = True
        self.fields['free_pages'].required = False
        # self.fields['buy_price'].readonly = True
        self.fields['buy_price'].widget.attrs['readonly'] = True

    # def clean(self):
    #     cleaned_data = super().clean()
    #     issue_date = cleaned_data.get("issue_date")
    #     published_date = cleaned_data.get("published_date")
    #     if issue_date >= published_date:
    #         raise forms.ValidationError("Publishes date cannot be older then issue date.")
    # def clean_photo(self):
    #     photo = self.cleaned_data.get('cover_pic', False)
    #     if photo:
    #         fileType = photo.content_type
    #         if fileType ["png", "jpg", "jpeg"]: #png and jpeg
    #             return photo
    #     raise forms.ValidationError('FileType not supported: only upload jpegs and pngs.')
        
    class Meta:
        model = MagazineInfo
        fields = ['comment','cover_pic', 'desktop_cover_pic','name', 'rent_price', 'buy_price', 'system_category', 'magazine_category', 'description', 'is_promoted', 'background_first_color', 'background_second_color', 'free_pages','issue_date', 'published_date', 'language', 'frequency','rent_date','sku','issues','year_available','umc','cover_price']

class MagazineAuthorForm(forms.ModelForm):
    author = forms.ModelMultipleChoiceField(queryset=Author.objects.all(),required=True,widget=forms.CheckboxSelectMultiple())

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['author'].required = True

    class Meta:
        model = MagMapAuthor
        fields =  ['author']


class AddMegazinePagesForm(forms.ModelForm):
    pages = forms.FileField(widget=forms.FileInput(attrs={'onchange':'validate1(this)',}))
    # page_number = forms.IntegerField(max_value=1000, min_value=1,label="Choose Magazine",widget=forms.NumberInput(attrs={'placeholder': 'Page Number','class':'form-control form-control-user'}))
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['magazine'].required = True
        self.fields['pages'].required = False
                           
    class Meta:
        model = MegazinePages
        fields = ['pages', 'magazine']

class AddSystemCategoryForm(forms.ModelForm):
    category_name = forms.CharField(max_length=25, label="Enter Category Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'pattern':'[A-Za-z ]+','placeholder': 'Enter Category Name','class':'form-control form-control-user'}))
     
    class Meta:
        model = SystemCategory
        fields = ['category_name']

class SubAdminForm(forms.ModelForm):
    first_name = forms.CharField(max_length=50, label="First Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'pattern':'[A-Za-z ]+','placeholder': 'Enter First Name','class':'form-control form-control-user'}))
    last_name = forms.CharField(max_length=50, label="Last Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'pattern':'[A-Za-z ]+','placeholder': 'Enter Last Name','class':'form-control form-control-user'}))
    email = forms.CharField(max_length=255, label="Email",widget=forms.EmailInput(attrs={'placeholder': 'Enter Email','class':'form-control form-control-user'}))
    
    # def clean(self):
    #     cleaned_data = super().clean()
    #     start_date = cleaned_data.get("password")
    #     end_date = cleaned_data.get("confirm_password")
    #     if end_date != start_date:
    #         raise forms.ValidationError("Password and Confirm password should be same.")
        
    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email']

class PublisherForm(forms.ModelForm):
    first_name = forms.CharField(max_length=50, label="First Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter First Name','class':'form-control form-control-user'}))
    last_name = forms.CharField(max_length=50, label="Last Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter Last Name','class':'form-control form-control-user'}))
    email = forms.CharField(max_length=255, label="Email",widget=forms.EmailInput(attrs={'placeholder': 'Enter Email','class':'form-control form-control-user'}))
    class Meta:
        model=User
        fields=['first_name','last_name','email']   

class SubPublisherForm(forms.ModelForm):
    first_name = forms.CharField(max_length=50, label="Subscription Type",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter First Name','class':'form-control form-control-user'}))
    last_name = forms.CharField(max_length=50, label="Last Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter Last Name','class':'form-control form-control-user'}))
    email = forms.CharField(max_length=255, label="Email",widget=forms.EmailInput(attrs={'placeholder': 'Enter Email','class':'form-control form-control-user'}))
    class Meta:
        model=User
        fields=['first_name','last_name','email']

class AddSubscriptionForm(forms.ModelForm):
    subscription_type = forms.CharField(max_length=25, label="Subscription Type",widget=forms.TextInput(attrs={'placeholder': 'Subscription Type','class':''}))
    name = forms.CharField(max_length=35, label="Name",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'pattern':'[A-Za-z ]+','placeholder': 'Name','class':'form-control form-control-user'}))
    price = forms.FloatField( max_value=1000000, min_value=1,label="Price",widget=forms.NumberInput(attrs={'placeholder': 'Price','class':'form-control form-control-user'}))
    start_date = forms.DateField(label="Start Date",widget=forms.DateInput(attrs={'type': 'date','placeholder': 'Start Date','class':'form-control form-control-user'}))
    end_date = forms.DateField(label="End Date",widget=forms.DateInput(attrs={'type': 'date','placeholder': 'End Date','class':'form-control form-control-user'}))
    # subscription_status = forms.BooleanField(label="Subscription Status",required=False,widget=forms.CheckboxInput(attrs={'placeholder': 'Subscription Status','class':'form-control form-control-user'}))
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['discount'].required = False

    class Meta:

        model = Subscription
        fields = ['users', 'subscription_type', 'name', 'price', 'start_date', 'end_date', 'subscription_status']


class AssignUsersToOffersForm(forms.ModelForm):
    users = forms.ModelMultipleChoiceField(queryset=User.objects.filter(roles_id=5).all(),required=True,widget=forms.CheckboxSelectMultiple())

    class Meta:
        model = User
        fields = ['users']

user_choice =(
    ("All", "All User"),
    ("Particular", "Particular Users"),
)          
class AddOffersForm(forms.ModelForm):
    for_users = forms.ChoiceField(choices=user_choice, required=True, widget=forms.Select(attrs={'class':'select-wrapper','onchange':'showUser("user_div", this)','id':'userShow'}))
    code = forms.CharField(max_length=20, label="Offer Code",widget=forms.TextInput(attrs={'placeholder': 'Enter Offer Code','class':'form-control form-control-user'}))
    discount = forms.FloatField(max_value=99, min_value=1,label="Discount %",widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'step':"0.01",'placeholder': 'Enter Discount','class':'form-control form-control-user','pattern':'([0-9]{2})(,[0-9]{2})*',}))
    max_discount = forms.IntegerField(required=False, max_value=1000000, min_value=1,label="Max Discount",widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'placeholder': 'Enter Max Discount','class':'form-control form-control-user'}))
    start_date = forms.DateField(label="Start Date",widget=forms.DateInput(attrs={'type': 'date','placeholder': 'Start Date','class':'form-control form-control-user','min':datetime.date.today,'max':'2999-12-31',}))
    end_date = forms.DateField(label="End Date",widget=forms.DateInput(attrs={'type': 'date','placeholder': 'End Date','class':'form-control form-control-user','min':datetime.date.today,'max':'2999-12-31',}))
    description = forms.CharField(required=False, max_length=1000, label="Description",widget=forms.Textarea(attrs={'placeholder': 'Enter Description(1000 words)','class':'form-control form-control-user'}))
    
    def clean(self):
        cleaned_data = super().clean()
        start_date = cleaned_data.get("start_date")
        end_date = cleaned_data.get("end_date")
        if start_date is None or end_date is None:
            raise forms.ValidationError("Please Check Date Once.")
        else:
            if end_date < start_date:
                raise forms.ValidationError("End date should be greater than start date.")

    class Meta:
        model = MagazineOfferinfo
        fields = ['for_users','code', 'discount', 'max_discount', 'start_date', 'end_date','description']
        error_messages = {
            'end_date': {
                'max_length': ("Error: End date cannot be past."),
                
            },
        }


class ChangePasswordForm(forms.ModelForm):
    password = forms.CharField(label='Password',min_length=6, widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter Password'}))
    confirm_password = forms.CharField(label='Password',min_length=6, widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Confirm Password'}))
    
    class Meta:
        model = User
        fields = ['password', 'confirm_password']

class VerifyRegiterForm(forms.Form):
    register_otp=forms.CharField(label='Enter your otp',min_length=4, widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter OTP'}))

class VerifyMobileForm(forms.Form):
    mobile_otp=forms.CharField(label='Enter your otp',min_length=4, widget=forms.PasswordInput(attrs={'class': 'form-control form-control-user', 'placeholder': 'Enter OTP'}))


# Country Model
class CountryForm(forms.ModelForm):
    name = forms.CharField(max_length=35, label="Country",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'placeholder': 'Enter Country Name','class':'form-control form-control-user'}))
    commission = forms.IntegerField(max_value=100,min_value=1, required=False, label="Commission",widget=forms.NumberInput(attrs={'placeholder': 'Enter Commission','class':'form-control form-control-user'}))
    class Meta:
        model = Country
        fields = ['name','commission'] 

class CountrySubscriptionForm(forms.ModelForm):
    # country_val = Country.objects.all().values_list('id','name')
    # country = forms.ChoiceField(choices= country_val)
    # name = forms.ModelMultipleChoiceField(queryset=Country.objects.all(),required=True,widget=forms.CheckboxSelectMultiple())
    name = forms.ModelMultipleChoiceField(queryset=Country.objects.all().values_list('name',flat=True),required=True,widget=forms.CheckboxSelectMultiple())
    # commission = forms.CharField(max_length=25, required=False, label="Commission",widget=forms.TextInput(attrs={'placeholder': 'Enter Commission','class':'form-control form-control-user'}))
   
    class Meta:
        model = Country
        fields = ['name',] 
  
    
# class CountryNameForm(forms.ModelForm):
#     name = forms.ModelMultipleChoiceField(queryset=Country.objects.all(),required=True,widget=forms.CheckboxSelectMultiple())

#     def __init__(self, *args, **kwargs):
#         super().__init__(*args, **kwargs)
#         self.fields['name'].required = True

#     class Meta:
#         model = MagMapAuthor
#         fields =  ['author']
        
    
class CommissionForm(forms.ModelForm):
    commission = forms.IntegerField(max_value=100,min_value=1,required=False,label="Commission",widget=forms.NumberInput(attrs={'placeholder': 'Enter Commission','class':'form-control form-control-user'}))        
    class Meta:
        model = Country
        fields = ['commission']     
          
GEEKS_CHOICES =(
    ("Buy", "Buy"),
    ("Rent", "Rent"),
)          
MONTH_CHOICES =(
    ("1", "1 Month"),
    ("2", "2 Month"),
    ("3", "3 Month"),
    ("4", "4 Month"),
    ("5", "5 Month"),
    ("6", "6 Month"),
    ("7", "7 Month"),
    ("8", "8 Month"),
    ("9", "9 Month"),
    ("10", "10 Month"),
    ("11", "11 Month"),
    ("12", "12 Month"),
) 
class SubscriptionTypeForm(forms.ModelForm):
    subscription_type= forms.CharField(max_length=20, label="Subscritpion Type",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')",'placeholder': 'Enter Subscription Name','class':'form-control form-control-user'}))        
    days= forms.ChoiceField(choices=MONTH_CHOICES, required=False)
    price=  forms.FloatField(max_value=999999,min_value=1,widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'step':"0.01",'placeholder': 'Enter Price','class':'form-control form-control-user'}))  
    description= forms.CharField(label="Description",max_length=1000,widget=forms.Textarea(attrs={'rows':1, 'cols':15,'placeholder': 'Enter Description(1000 words)','class':'form-control form-control-user'}))  
    discount=forms.FloatField(max_value=99,min_value=1 ,label="Discount",widget=forms.NumberInput(attrs={"oninput":"validity.valid||(value='');",'step':"0.01",'placeholder': 'Enter Discount','class':'form-control form-control-user'})) 
    # per_month_price=forms.FloatField(max_value=1000000, min_value=0,label="Per Month Price",widget=forms.NumberInput(attrs={'placeholder': 'Per Month Price','class':'form-control form-control-user'}))
    # country_val = Country.objects.all().values_list('id','name')
    # print(country_val,"================")
    # country = forms.ChoiceField(choices= country_val)
    # type=forms.ChoiceField(choices = GEEKS_CHOICES)
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['description'].required = False
        self.fields['discount'].required = False
    
    class Meta:
        model = SubscriptionType
        fields = ['subscription_type','days','price','description','country','discount']
        
class SubscriptionCommisionForm(forms.ModelForm):
    subscription_type= forms.CharField(max_length=25,disabled = True, label="Subscritpion Type",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-ZA-Z, ]/, '')",'placeholder': 'Enter Subscription Name','class':'form-control form-control-user'}))        
    days= forms.ChoiceField(choices=MONTH_CHOICES, required=False)
    price=  forms.FloatField(max_value=1000000, min_value=1,label="Enter Price",widget=forms.NumberInput(attrs={"oninput":"this.value = this.value > 999999 ? 1 : Math.abs(this.value)",'placeholder': 'Enter Price','class':'form-control form-control-user'}))
    # price=  forms.CharField(min_length=1,max_length=10,label="Price",widget=forms.TextInput(attrs={'placeholder': 'Enter Price','class':'form-control form-control-user'}))       
    description= forms.CharField(label="Description",max_length=1000,widget=forms.Textarea(attrs={'rows':1, 'cols':15,'placeholder': 'Enter Description(1000 words)','class':'form-control form-control-user'}))  
    # type=forms.ChoiceField(choices = GEEKS_CHOICES)
    # country = forms.ChoiceField(choices=Country.objects.all(),required=False, disabled = True,widget=forms.Select())
    # country = forms.CharField()
    discount=forms.IntegerField(max_value=99,min_value=1 ,label="Discount",widget=forms.NumberInput(attrs={'placeholder': 'Enter Discount','class':'form-control form-control-user'}))
    # per_month_price=forms.FloatField(max_value=1000000, min_value=0,label="Per Month Price",widget=forms.NumberInput(attrs={'placeholder': 'Per Month Price','class':'form-control form-control-user'}))
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['discount'].required = False
        self.fields['description'].required = False

    class Meta:
        model = SubscriptionType
        fields = ['subscription_type','days','price','description','discount']       
    
        
class WithdrawalForm(forms.ModelForm):
    withdrawal_amount = forms.CharField(max_length=6,min_length=1,widget=forms.TextInput(attrs={'class':'form-control form-control-user','oninput':"this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*?)\..*/g, '$1');"}))
    name = forms.CharField(max_length=50,widget=forms.TextInput(attrs={'class':'form-control form-control-user','onkeydown':'return /[a-z ]/i.test(event.key)',}))
    mobile_number = forms.CharField(max_length=15,min_length=8,widget=forms.TextInput(attrs={'class':'form-control form-control-user','oninput':"this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*?)\..*/g, '$1');"}))
    bank_account_number = forms.CharField(max_length=16,min_length=12,widget=forms.TextInput(attrs={'class':'form-control form-control-user','oninput':"this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*?)\..*/g, '$1');"}))
    bank_name = forms.CharField(max_length=25,widget=forms.TextInput(attrs={'class':'form-control form-control-user','onkeydown':'return /[a-z]/i.test(event.key)',}))
    mcr_code = forms.CharField(max_length=25,widget=forms.TextInput(attrs={'class':'form-control form-control-user','oninput':"this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*?)\..*/g, '$1');"}))
    swift_code = forms.CharField(max_length=15,widget=forms.TextInput(attrs={'class':'form-control form-control-user','oninput':"this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*?)\..*/g, '$1');"}))
    ifsc_code = forms.CharField(max_length=15,widget=forms.TextInput(attrs={'class':'form-control form-control-user','onkeydown':'return /[a-z ^0-9]/i.test(event.key)'}))

    class Meta:
        model = WithdrawalDetails
        fields = ['withdrawal_amount','name','mobile_number','bank_account_number','bank_name','mcr_code','swift_code','ifsc_code']       

MONTH_CHOICES_ONE =(
    ("1", "1 Month"),
) 
class RentForm(forms.ModelForm):
    name = forms.CharField(max_length=20,widget=forms.TextInput(attrs={'placeholder': 'Enter Name','class':'form-control form-control-user','onkeydown':'return /[a-z ]/i.test(event.key)',}))
    validity = forms.ChoiceField(choices=MONTH_CHOICES_ONE, required=False)
    price = forms.FloatField(max_value=1000, min_value=1,label="Enter Price",widget=forms.NumberInput(attrs={'step':"0.01","oninput":"validity.valid||(value='');",'placeholder': 'Enter Price','class':'form-control form-control-user'}))
    
    class Meta:
        model = UserRent
        fields = ['name','price','validity']       


class RentForCountryForm(forms.ModelForm):
    country = forms.ModelMultipleChoiceField(queryset=Country.objects.all().values_list('name',flat=True),required=True,widget=forms.CheckboxSelectMultiple())
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['country'].required = True

    class Meta:
        model = RentForCountry
        fields = ['country']

# from froala_editor.widgets import FroalaEditor
## Blogs Form
class BlogsForm(forms.ModelForm):
    title = forms.CharField(max_length=50, label="Title",widget=forms.TextInput(attrs={"oninput":"this.value = this.value.replace(/[^a-zA-Z, ]/, '')", 'pattern':'[A-Za-z ]+','placeholder': 'Enter Title','class':'form-control form-control-user'}))
    content = forms.CharField(widget=forms.Textarea(attrs={'id':'editor','class':'form-control form-control-user description_area'}))
    # category = forms.ChoiceField(choices=MagazineCategory.objects.all(),widget=forms.Select(attrs={}))
    cover_image =  forms.ImageField(required=True,widget=forms.FileInput(attrs={'onchange':'validate2(this)',}))

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['title'].required = True
        self.fields['content'].required = True
        self.fields['cover_image'].required = True
        self.fields['category'].required = True
        # self.fields['category'].default = 2

    class Meta:
        model = Blogs
        fields = ['cover_image','title','category' ,'content']


class BlogImageForm(forms.ModelForm):
    files = forms.FileField(required=False, widget=forms.FileInput(attrs={'onchange':'clickfunc(this)',}))
    class Meta:
        model = BlogsImages
        fields = ['files']
