from django import forms

from apps.rims.hr.models import (
    BackToOfficeReport,
    Department,
    LeaveRequest,
    LeaveType,
    StaffProfile,
    TravelReport,
    TravelRequest,
)


class StaffProfileForm(forms.ModelForm):
    class Meta:
        model = StaffProfile
        fields = [
            "employee_id",
            "department",
            "job_title",
            "employment_type",
            "status",
            "date_joined",
            "contract_end_date",
            "supervisor",
            "phone",
            "national_id",
            "emergency_contact_name",
            "emergency_contact_phone",
            "notes",
        ]
        widgets = {
            "date_joined": forms.DateInput(attrs={"type": "date"}),
            "contract_end_date": forms.DateInput(attrs={"type": "date"}),
            "notes": forms.Textarea(attrs={"rows": 3}),
        }


class DepartmentForm(forms.ModelForm):
    class Meta:
        model = Department
        fields = ["name", "head"]


class LeaveRequestForm(forms.ModelForm):
    class Meta:
        model = LeaveRequest
        fields = ["leave_type", "start_date", "end_date", "days", "reason"]
        widgets = {
            "start_date": forms.DateInput(attrs={"type": "date"}),
            "end_date": forms.DateInput(attrs={"type": "date"}),
            "reason": forms.Textarea(attrs={"rows": 3}),
        }


class LeaveReviewForm(forms.ModelForm):
    class Meta:
        model = LeaveRequest
        fields = ["status", "review_note"]
        widgets = {
            "review_note": forms.Textarea(attrs={"rows": 3}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["status"].choices = [
            (LeaveRequest.Status.APPROVED, "Approve"),
            (LeaveRequest.Status.REJECTED, "Reject"),
        ]


class BackToOfficeForm(forms.ModelForm):
    class Meta:
        model = BackToOfficeReport
        fields = ["return_date", "summary"]
        widgets = {
            "return_date": forms.DateInput(attrs={"type": "date"}),
            "summary": forms.Textarea(attrs={"rows": 4}),
        }


class TravelRequestForm(forms.ModelForm):
    class Meta:
        model = TravelRequest
        fields = [
            "purpose",
            "destination",
            "travel_type",
            "departure_date",
            "return_date",
            "estimated_cost",
            "currency",
            "per_diem_days",
            "notes",
        ]
        widgets = {
            "departure_date": forms.DateInput(attrs={"type": "date"}),
            "return_date": forms.DateInput(attrs={"type": "date"}),
            "notes": forms.Textarea(attrs={"rows": 3}),
        }


class TravelReportForm(forms.ModelForm):
    class Meta:
        model = TravelReport
        fields = ["summary", "outcomes", "actual_cost"]
        widgets = {
            "summary": forms.Textarea(attrs={"rows": 4}),
            "outcomes": forms.Textarea(attrs={"rows": 4}),
        }
