from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm,PasswordResetForm, SetPasswordForm
from .models import *
from django.conf import settings
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth import password_validation
from ckeditor.widgets import CKEditorWidget
from django.contrib.auth.models import User

class RegisterForm(UserCreationForm):
    email = forms.EmailField(required=True)
    company_name = forms.CharField(max_length=100)

    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email', 'company_name', 'password1', 'password2']
        
class CustomUserCreationForm(UserCreationForm):
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'password'}))
    password2 = forms.CharField(label='Confirm Password (again)', widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'password again'}))
    agreement = forms.BooleanField(
        required=True,
        label='I agree to the terms of service',
        error_messages={ 'required': ("You must agree to the terms to register")})

    class Meta:
        model = User_Profile
        fields = ['email', 'organisation', 'password1', 'password2', 'agreement']
        lables = {'email':'Email', 'password1':'Password', 'password2':'Confirm Password (again)'}
        widgets = {
                   'email':forms.EmailInput(attrs={'class':'form-control','placeholder':'email'}),
                   'organisation':forms.TextInput(attrs={'class':'form-control','placeholder':'organisation'}),
}

class AddEmployeeForm(forms.ModelForm):
    
    email = forms.CharField(label='Email', required=True, widget=forms.EmailInput(attrs={'class':'form-control'}))
    full_name = forms.CharField(label='Full Name', required=True, widget=forms.TextInput(attrs={'class':'form-control'}))
    phone = forms.CharField(label='Phone', required=True, widget=forms.TextInput(attrs={'class':'form-control'}))
    class Meta:
        model = User_Profile
        fields = ['email','full_name','phone','employee_id','department','manager','team_leader','hr','job_title','employee_type','experiance','date_of_birth','address','date_join']
        lables = {'email':'Email'}
        
        widgets = {
                   'employee_id':forms.TextInput(attrs={'class':'form-control','required':'required'}),
                   'department':forms.Select(attrs={'class':'form-control'}),
                   'manager':forms.Select(attrs={'class':'form-control'}),
                   'team_leader':forms.Select(attrs={'class':'form-control'}),
                   'hr':forms.Select(attrs={'class':'form-control'}),
                   'job_title':forms.TextInput(attrs={'class':'form-control'}),
                   'employee_type':forms.Select(attrs={'class':'form-control'}),
                   'experiance':forms.TextInput(attrs={'class':'form-control','placeholder':'enter in years i.e. 2'}),
                   'date_of_birth':forms.DateInput(attrs={'class':'form-control','type':'date'}),
                   'address':forms.TextInput(attrs={'class':'form-control'}),
                   'date_join':forms.DateInput(attrs={'class':'form-control','type':'date'}),
                }

class LoginForm(forms.Form):
    email = forms.CharField(label='Email', required=True, widget=forms.EmailInput(attrs={'class':'form-control','placeholder':'email'}))
    password = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'password'}))


class ChangePasswordForm(PasswordChangeForm):
    old_password = forms.CharField(label=("Old Password"), strip=False, widget=forms.PasswordInput
            (attrs={'autocomplete':'current-password','autofocus':True, 'class':'form-control'}))
    new_password1 = forms.CharField(label=("New Password"), strip=False, widget=forms.PasswordInput
            (attrs={'autocomplete':'new-password', 'class':'form-control'}),
            help_text=password_validation.password_validators_help_text_html())
    new_password2 = forms.CharField(label=("Confirm New Password"), strip=False, widget=forms.PasswordInput
            (attrs={'autocomplete':'new-password', 'class':'form-control'}))

class CustomUserChangeForm(UserChangeForm):
    # group = forms.ModelChoiceField(label='Role',queryset=Group.objects.all(), required=True, widget=forms.Select(attrs={'class':'form-control'}))
    class Meta:
        model = User_Profile
        fields = ['email','full_name','phone','employee_id','department','manager','team_leader','hr','job_title','employee_type','experiance','date_of_birth','address','date_join','groups']
        widgets = {
            'full_name':forms.TextInput(attrs={'class':'form-control','required':'required'}),
            'phone':forms.TextInput(attrs={'class':'form-control','required':'required'}),
            'date_of_birth':forms.DateInput(attrs={'class':'form-control','type':'date'}),
            'date_join':forms.DateInput(attrs={'class':'form-control','type':'date'}),
            'address':forms.TextInput(attrs={'class':'form-control'}),
        }
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field_name in self.fields:
            if field_name == 'profile_pic':
                self.fields[field_name].widget.attrs.update({'class': 'form-control','onchange':'previewImage(this);'})
            elif field_name == 'groups':
                self.fields[field_name].label = 'Role'
                self.fields[field_name].widget.attrs.update({'class': 'form-control','required':'required'})
            self.fields[field_name].widget.attrs.update({'class': 'form-control'})


class BankCreationForm(forms.ModelForm):
    salary = forms.DecimalField(required=True,widget=forms.TextInput(attrs={'class': 'form-control'}))
    class Meta:
        model = Bank
        fields = ['employee', 'name', 'branch', 'account', 'salary','country']
        
        widgets = {'employee':forms.Select(attrs={'class':'form-control','required':'required'}),
                   'name':forms.TextInput(attrs={'class':'form-control','required':'required'}),
                   'branch':forms.TextInput(attrs={'class':'form-control','required':'required'}),
                   'account':forms.TextInput(attrs={'class':'form-control','required':'required'}),
                   'country':forms.TextInput(attrs={'class':'form-control','required':'required'}),
}

class PayrollForm(forms.ModelForm):
    basic_salary = forms.IntegerField(label=("Basic Salary"),required=True,widget=forms.TextInput(attrs={'class':'form-control'}))
    present_days = forms.IntegerField(label=("Present Days"),required=True,widget=forms.TextInput(attrs={'class':'form-control'}))
    medical = forms.IntegerField(label=("Medical"),widget=forms.TextInput(attrs={'class':'form-control'}))
    pf = forms.IntegerField(label=("PF"),widget=forms.TextInput(attrs={'class':'form-control'}))
    convence = forms.IntegerField(label=("Convence"),widget=forms.TextInput(attrs={'class':'form-control'}))
    total_days = forms.IntegerField(label=("Total Days"),required=True,widget=forms.TextInput(attrs={'class':'form-control'}))
    bonus = forms.DecimalField(widget=forms.TextInput(attrs={'class': 'form-control'}))
    tax = forms.DecimalField(required=True,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'enter in percent i.e. 3'}))
    class Meta:
        model = Payroll
        fields = ['employee','month', 'year','basic_salary','total_days', 'present_days', 'medical','pf','bonus','convence','tax']
        widgets = {
                    'employee':forms.Select(attrs={'class':'form-control','required':'required'}),
                   'month':forms.Select(attrs={'class':'form-control','required':'required'}),
                   'year':forms.Select(attrs={'class':'form-control','required':'required'}),
                   
                }


class MyPasswordResetForm(PasswordResetForm):
    email = forms.CharField(label=("Email"), max_length=254, widget=forms.EmailInput
    (attrs={'autocomplete':'email', 'class':'form-control','placeholder':'Enter your email'}))

class MySetPasswordResetForm(SetPasswordForm):
    new_password1 = forms.CharField(label=("New Password"), strip=False, widget=forms.PasswordInput
    (attrs={'autocomplete':'new-password', 'class':'form-control'}),
    help_text=password_validation.password_validators_help_text_html())
    new_password2 = forms.CharField(label=("Confirm New Password"), strip=False, widget=forms.PasswordInput
    (attrs={'autocomplete':'new-password', 'class':'form-control'}))

class ProjectForm(forms.ModelForm):
    class Meta:
        model = Project
        fields = ['project_name', 'employees']
        widgets = {
            'project_name': forms.TextInput(attrs={'required': 'required','class':'form-control'}),
            'employees': forms.SelectMultiple(attrs={'size': '5', 'required': 'required','class':'form-control'}),
        }

class InsuranceCreationForm(forms.ModelForm):
    
    class Meta:
        model = Health_Benefit
        fields = ['provider_name']
        
        widgets = {
                   'provider_name':forms.TextInput(attrs={'class':'form-control','required':'required'})
                   
}

class FeedbackForm(forms.ModelForm):
    
    class Meta:
        model = Feedback
        fields = ['feedback_text']
        labels = {''}
        widgets = {
                   'feedback_text':forms.Textarea(attrs={'class':'form-control','required':'required'})
}
        

class TrainingForm(forms.ModelForm):
    
    class Meta:
        model = Training
        fields = ['trainer','title','description','date','time']
        labels = {'trainer':'Name of Trainer','title':'Title of Training & Session'}
        widgets = {
                   'trainer':forms.TextInput(attrs={'class':'form-control','required':'required'}),
                   'title':forms.TextInput(attrs={'class':'form-control','required':'required'}),
                   'description':forms.Textarea(attrs={'class':'form-control','required':'required'}),
                   'date':forms.DateInput(attrs={'class':'form-control','type':'date','required':'required'}),
                   'time':forms.TimeInput(attrs={'class':'form-control','type':'time','required':'required'})
}

class PlanSelectionForm(forms.Form):
    
    selected_plan = forms.ChoiceField(choices=[('1-3 members for free', '1-3 members for free'), ('3-10 members $5/month', '3-10 members $5/month'), ('10-50 members $15/month', '10-50 members $15/month')])


class privacy_policy_form(forms.ModelForm):
    
    class Meta:
        model = privacy_policy
        fields = ['policy_text']
        widgets = {
            'policy_text': CKEditorWidget(),
        }

class VendorForm(forms.ModelForm):
    class Meta:
        model = Vendor
        fields = ['name', 'vendor_logo','website','services','internal_stakeholders','criticality','status','complaint_with','vendor_type']
        labels = {'name':'Vendor Name','vendor_logo':'Upload Vendor Logo','services':'Product or Service Description'}
        widgets = {
                   'name':forms.TextInput(attrs={'class':'form-control','required':'required'}),
                   'vendor_logo':forms.FileInput(attrs={'class':'form-control'}),
                   'website':forms.URLInput(attrs={'class':'form-control','required':'required'}),
                   'services':forms.Textarea(attrs={'class':'form-control','required':'required','rows': 4, 'cols': 30}),
                   'internal_stakeholders':forms.SelectMultiple(attrs={'size':'5','class':'form-control'}),
                   'criticality':forms.Select(attrs={'class':'form-control'}),
                   'status':forms.Select(attrs={'class':'form-control'}),
                   'complaint_with':forms.TextInput(attrs={'class':'form-control'}),
                   'vendor_type':forms.TextInput(attrs={'class':'form-control','placeholder':'Input vendor type description here'}),
}


class JobDescriptionForm(forms.ModelForm):
    class Meta:
        model = job_description
        fields = ['employee', 'description']
        labels = {'description':'Job Description of Employee'}
        widgets = {
                   'employee':forms.Select(attrs={'class':'form-control','required':'required'}),
                   'description':forms.Textarea(attrs={'class':'form-control','required':'required'}),
                   
}

class UploadAgreementForm(forms.ModelForm):
    class Meta:
        model = company_agreements
        fields = ['employee_handbook', 'confidential_agreement']
        labels = {}
        widgets = {
                   'employee_handbook':forms.FileInput(attrs={'class':'form-control','required':'required'}),
                   'confidential_agreement':forms.FileInput(attrs={'class':'form-control','required':'required'}),
                   
}