package entity

import (
	"mime/multipart"
)

type UserAuthInput struct {
	Mobno string `form:"mobno" binding:"required,len=10,numeric"`
}

type UserFetchInput struct {
	Mobno         string `form:"mobno" binding:"required,len=10,numeric"`
	Language_Code int    `form:"language_code" default:"1"`
}

type InitConfigInput struct {
	Userid        int `form:"userid" binding:"required"`
	ApartmentId   int `form:"apartmentid" binding:"required"`
	Language_Code int `form:"language_code" default:"1"`
}

type VerifyOTPInput struct {
	Mobno string `form:"mobno" binding:"required,len=10,numeric"`
	OTP   int    `form:"otp" binding:"required,numeric"`
}

type AdminAuthInput struct {
	Mobno         string `form:"mobno"`
	OTP           int    `form:"otp"`
	Language_Code int    `form:"language_code" default:"1"`
}

type CityListInput struct {
	State_Id      int `form:"stateid"`
	Language_Code int `form:"language_code" default:"1"`
	//Start         int `json:"start" binding:"required"`
	//End           int `json:"end" binding:"omitempty,len=12,numeric"`
}

type AddAddressInput struct {
	Addressline1 string `json:"addressline1" binding:"required" db:"Address_Line1"`
	Addressline2 string `json:"addressline2" db:"Address_Line2"`
	Area         string `json:"area" db:"Area_Name"`
	City         string `json:"city" binding:"required" db:"City"`
	State        string `json:"state" db:"State"`
	Pincode      string `json:"pincode" binding:"required" db:"Pincode"`
}

type StateListInput struct {
	Language_Code int `form:"language_code" default:"1"`
}

type ApartmentListInput struct {
	State_Id      int `form:"stateid"`
	City_Id       int `form:"cityid"`
	Language_Code int `form:"language_code" default:"1"`
}

type Signupuser struct {
	User_Name               string `json:"User_Name" binding:"required" db:"User_Name"`
	Address_Type            int    `json:"Address_Type"  db:"Address_Type"`
	Apartment_Id            int    `json:"Apartment_Id" binding:"required"  db:"Apartment_Id"`
	Block                   string `json:"Block"  db:"Block"`
	Doorno                  string `json:"Door_No"  db:"Door_No"`
	User_Mobno              int64  `json:"mobno" binding:"required"  db:"User_Mobno"`
	User_Emailid            string `json:"User_Email"  db:"User_Email"`
	User_Type               string `json:"User_Type"  db:"User_Type"`
	Apartment_Purchase_Date string `json:"Apartment_Purchase_Date"  db:"Apartment_Purchase_Date"`
	Alternate_No            int64  `json:"Alternate_No"  db:"Alternate_No"`
	Referral_Code           string `json:"referralcode"  db:"Referral_Code"`
	Address_Id              int    `json:"addressid"  db:"Address_Id"`
	Account_Status          string `json:"accountstatus"  db:"Account_Status"`
	IsRefProcessed          string `json:"isrefprocessed"  db:"Is_Referral_Processed"`
	Referree_Code           string `json:"referreecode"  db:"Referree_Code"`
	GSTN                    string `json:"GSTN"  db:"GSTN"`
	TIN                     string `json:"TIN"  db:"TIN"`
	PAN                     string `json:"PAN"  db:"PAN"`
	Billing_Address_Id      int    `json:"Billing_Address_Id"  db:"Billing_Address_Id"`
	Notification_Token      string `json:"Notification_Token"  db:"Notification_Token"`
}

type CreateRequestInput struct {
	Srq_Service          int                     `form:"service" db:"Srq_Service" binding:"required"`
	Request_Type         *int                    `form:"request_type" db:"Request_Type"`
	Srq_Apartment_Id     int                     `form:"apartmentid" db:"Srq_Apartment_Id" binding:"required"`
	User_Id              int                     `form:"userid" db:"User_Id" binding:"required"`
	Srq_Problem_Desc     *string                 `form:"problem_description" db:"Srq_Problem_Desc"`
	Srq_Problem_Category *int                    `form:"sub_category" db:"Srq_Problem_Category"`
	Srq_Category_Others  string                  `form:"other_category" db:"Srq_Category_others"`
	Srq_Visit_Timeslot   *string                 `form:"timeslot" db:"Srq_Visit_Timeslot"`
	Srq_Instructions     *string                 `form:"instructions" db:"Srq_Instructions"`
	Promo_Id             *int                    `form:"promoid" db:"Promo_Id"`
	Srq_Image            []*multipart.FileHeader `form:"srq_img"`
	Language_Code        int                     `form:"language_code" default:"1"`
	Srq_Tax_Percentage   *float32                `form:"srq_tax_percentage" db:"Srq_Tax_Percentage"`
}

type AddStateInput struct {
	Language_Code int    `json:"language_code" default:"1"`
	State_Name    string `json:"state" db:"State_Name" binding:"required"`
}

type AddCityInput struct {
	State_Id      int    `json:"stateid" db:"State_Id" binding:"required"`
	City_Name     string `json:"city" db:"City_Name" binding:"required"`
	Language_Code int    `json:"language_code" default:"1"`
}
type AddApartmentInput struct {
	City_Id         int                   `form:"cityid" db:"City_Id" binding:"required"`
	State_Id        int                   `form:"stateid" db:"State_Id" binding:"required"`
	Created_By      int                   `form:"createdby" db:"Created_By" binding:"required"`
	Apartment_Name  string                `form:"apartment" db:"Apartment_Name" binding:"required"`
	Language_Code   int                   `form:"language_code" default:"1"`
	Apartment_Image *multipart.FileHeader `form:"apartment_img" db:"Apartment_Image"`
	In_charge       int                   `form:"incharge_id"`
	Services        string                `form:"service_id" db:"Service_Id" binding:"required"`
}

type ValidateCustomer struct {
	Emp_Id         int    `json:"admin_id"  db:"Emp_Id"`
	User_Mobno     string `json:"user_mobnum"  db:"User_Mobno" binding:"required,len=10,numeric"`
	Account_Status string `json:"account_status"  db:"Account_Status" binding:"required"`
	Reject_Reason  string `json:"reject_reason"  db:"Reject_Reason"`
}

type AddFeedback struct {
	User_Id       int     `json:"user_id" db:"User_Id"`
	Feedback      string  `json:"feedback"  db:"Feedback"`
	Rating        float32 `json:"rating"  db:"Rating"`
	Feedback_Type int     `json:"Feedback_For"  db:"Feedback_Type"`
	Service_ID    int     `json:"service_id"  db:"Service_Id"`
	Technician_ID int     `json:"technician_id"  db:"Technician_Id"`
	Language_Code int     `json:"language_code" default:"1"`
}

type SignUpAdminInput struct {
	Name                 string                `form:"name" db:"Emp_Name" binding:"required"`
	Passcode             int                   `form:"passcode" db:"Passcode" binding:"required"`
	Email                string                `form:"email" db:"Emp_Email"`
	Primary_Contact      string                `form:"primary_mobnum" db:"Emp_Mobno" binding:"required,len=10,numeric"`
	Emergency_Contact    string                `form:"emergency_mobnum" db:"Alternate_Mobno" binding:"required,len=10,numeric"`
	Address              int                   `form:"address_id" db:"Address_Id"`
	Proof                string                `form:"proof" db:"Emp_Proof" binding:"required"`
	Proof_ID             string                `form:"proof_id" db:"Emp_Proof_Id" binding:"required"`
	Photo                *multipart.FileHeader `form:"photo" db:"Emp_Image"` //binding:"required"`
	Skilled_Services     string                `form:"skilled_services" db:"Service_Id" binding:"required"`
	Allocated_Apartments string                `form:"allocated_apartments" db:"Apartment_Id" binding:"required"`
	Employee_Type        string                `form:"employee_type" db:"Employee_Type" binding:"required"`
	Employer_Name        string                `form:"employer_name" db:"Vendor_name"`
	Employee_ID          int                   `form:"employee_id" db:"Emp_Id"`
	Role_ID              int                   `form:"role_id" db:"Role_Id"`
	Date_of_Birth        string                `form:"date_of_birth" db:"Emp_DOB" binding:"required"`
	Date_of_Joining      string                `form:"date_of_joining" db:"Emp_DOJ" binding:"required"`
	Date_of_Resigning    string                `form:"date_of_resigning" db:"Emp_DOR" binding:"required"`
	Is_Available         int                   `form:"is_available" db:"Is_Available" default:"1"`
	Country              string                `form:"country" db:"Country" binding:"required"`
	State                string                `form:"state" db:"State" binding:"required"`
	City                 string                `form:"city" db:"City" binding:"required"`
	Area_Name            string                `form:"area_name" db:"Area_Name" binding:"required"`
	Address_Line1        string                `form:"address_line1" db:"Address_Line1" binding:"required"`
	Address_Line2        string                `form:"address_line2" db:"Address_Line2" binding:"required"`
	Pincode              int                   `form:"pincode" db:"Pincode" binding:"required"`
	Latitude             float64               `form:"latitude" db:"Latitude"`
	Longitude            float64               `form:"longitude" db:"Longitude"`
}

type GetTimeSlotInput struct {
	Apartment_Id int    `form:"apartmentid" db:"Apartment_Id" binding:"required"`
	Date         string `form:"slot_date" db:"Slot_Date" binding:"required"`
}

type GetApartmentDetailsInput struct {
	Language_Code int `form:"language_code" default:"1"`
	Apartment_Id  int `form:"apartmentid" db:"Apartment_Id"`
}

type FetchServicesInput struct {
	Language_Code int `form:"language_code" default:"1"`
	Apartment_Id  int `form:"apartmentid"`
}

type FetchProblemCategoryInput struct {
	Language_Code int `form:"language_code" default:"1"`
}

type GetProblemDescriptionInput struct {
	Service_Id    int `form:"service_Id" db:"Service_Id" binding:"required"`
	Language_Code int `form:"language_code" default:"1"`
}

type AddServiceInput struct {
	Service_Name        string                `form:"service_name" db:"Service_Name" binding:"required"`
	Service_Image_Small *multipart.FileHeader `form:"service_image_small" db:"Service_Image_Small" binding:"required"`
	Service_Image_large *multipart.FileHeader `form:"service_image_large" db:"Service_Image_large" binding:"required"`
	Service_Description string                `form:"service_description" db:"Service_Description" binding:"required"`
	Language_Code       int                   `form:"language_code" db:"Language_Code" default:"1"`
}
type UpdateEmployeeProfileInput struct {
	Name              string                `form:"name" db:"Emp_Name"`
	Passcode          int64                 `form:"passcode" db:"Passcode"`
	Email             string                `form:"email" db:"Emp_Email"`
	Primary_Contact   string                `form:"primary_contact" db:"Emp_Mobno"`
	Emergency_Contact string                `form:"emergency_mobnum" db:"Alternate_Mobno"`
	Emp_Type          string                `form:"emp_type" db:"Emp_Type"`
	Date_of_Resigning string                `form:"date_of_resigning" db:"Emp_DOR"`
	Emp_Status        string                `form:"emp_status" db:"Emp_Status"`
	Emp_Rejoining     string                `form:"emp_rejoining" db:"Emp_Rejoining"`
	Proof             string                `form:"proof" db:"Emp_Proof"`
	Proof_ID          string                `form:"proof_id" db:"Emp_Proof_Id"`
	Employer_Name     string                `form:"employer_name" db:"Vendor_name"`
	Skilled_Services  string                `form:"skilled_services" db:"Service_Id"`
	Country           string                `form:"country" db:"Country"`
	State             string                `form:"state" db:"State"`
	City              string                `form:"city" db:"City"`
	Area              string                `form:"area" db:"Area_Name"`
	Addressline1      string                `form:"addressline1" db:"Address_Line1"`
	Addressline2      string                `form:"addressline2" db:"Address_Line2"`
	Pincode           string                `form:"pincode"  db:"Pincode"`
	Latitude          string                `form:"latitude" db:"Latitude"`
	Emp_Id            int                   `form:"empid" db:"Emp_Id" binding:"required"`
	Longitude         string                `form:"longitude" db:"longitude"`
	Role_Id           int64                 `form:"roleid" db:"Role_Id"`
	Language_Code     int                   `form:"language_code" default:"1"`
	Photo             *multipart.FileHeader `form:"photo" db:"Emp_Image"`
}
type EmpApartmentConfigInput struct {
	Emp_Id       int    `json:"empid" db:"Emp_Id" binding:"required"`
	Apartment_Id string `json:"apartmentid" db:"Apartment_Id" binding:"required"`
	Action       string `json:"action"`
}

type CreateLeaveInput struct {
	Emp_Id      int    `json:"empid" db:"Emp_Id" binding:"required"`
	Reason      string `json:"reason" db:"Reason"`
	From_Date   string `json:"fromdate" db:"From_Date" binding:"required"`
	To_Date     string `json:"todate" db:"To_Date" binding:"required"`
	Approved_By int    `json:"approved_by" db:"Approved_By"`
}
type SuperAdminDashboardInput struct {
	Language_Code int `form:"language_code" default:"1"`
}

type FetchServiceRequestInput struct {
	User_Id          int    `form:"userid"`
	Srq_Id           int    `form:"srq_id" db:"Srq_Id"`
	Apartment_Id     int    `form:"apartmentid" db:"Srq_Apartment_Id"`
	Service_Id       string `form:"serviceid" db:"Srq_Service"`
	Admin_Id         int    `form:"adminid" db:"Adm_Id"`
	Technician_Id    int    `form:"technicianid" db:"Technician_Id"`
	Problem_Category int    `form:"problemid" db:"Srq_Problem_Category"`
	Problem          string `form:"sub_problem" db:"Problem_Name"`
	Page             int    `form:"page" default:"1"`
	Status           string `form:"status"`
	FromDate         string `form:"fromdate"`
	ToDate           string `form:"todate"`
	Language_Code    int    `form:"language_code" default:"1"`
	Name             string `form:"username" db:"User_Name"`
	Payment_Status   string `form:"payment_status" db:"Srq_Payment_Status"`
	Tech_Name        string `form:"techname" db:"Technician_Name"`
}

type GetAllUsersInput struct {
	Language_Code int    `form:"language_code" default:"1"`
	Apartment_Id  int    `form:"apartment_id"`
	Status        string `form:"status"`
	Page          int    `form:"page" default:"1"`
	PageLimit     int    `form:"pagelimit" default:"15"`
}

type FetchTechnicianInput struct {
	Service_Id   int    `form:"service_id" db:"Service_Id" binding:"required"`
	Apartment_Id int    `form:"apartment_id" db:"Apartment_Id" binding:"required"`
	Time_slot    string `form:"time_slot" db:"Srq_Visit_Timeslot" binding:"required"`
	Page         int    `form:"page" default:"1"`
	PageLimit    int    `form:"pagelimit" default:"15"`
	Name         string `form:"emp_name"`
}

type GetAdminListInput struct {
	Emp_Id       int    `form:"employee_id" db:"Emp_Id"`
	Phone_Number int64  `form:"phone_number" db:"Emp_Mobno"`
	Page         int    `form:"page" default:"1"`
	PageLimit    int    `form:"pagelimit" default:"15"`
	Action       string `form:"action"`
}

type GetTechnicianListInput struct {
	Emp_Id       int    `form:"employee_id" db:"Emp_Id"`
	Phone_Number int64  `form:"phone_number" db:"Emp_Mobno"`
	Emp_Name     string `form:"emp_name" db:"Emp_Name"`
	Page         int    `form:"page" default:"1"`
	PageLimit    int    `form:"pagelimit" default:"15"`
	Service_Id   int    `form:"service_id" db:"Service_Id"`
	Action       string `form:"action"`
}

type UpdateProfileInput struct {
	User_Id      int                   `form:"user_id" db:"User_Id" binding:"required"`
	User_Name    string                `form:"name"  db:"User_Name"`
	User_Mobno   int64                 `form:"mobno"  db:"User_Mobno"`
	User_Emailid string                `form:"user_email"  db:"User_Email"`
	Alternate_No string                `form:"alternate_no"  db:"Alternate_No"`
	User_Image   *multipart.FileHeader `form:"user_img" db:"User_Image"`
}

type UpdateApartmentInput struct {
	Apartment_Id    int                     `form:"apartmentid" db:"Apartment_Id" binding:"required"`
	Apartment_Name  string                  `form:"apartment" db:"Apartment_Name"`
	Language_Code   int                     `form:"language_code" default:"1"`
	Apartment_Image *multipart.FileHeader   `form:"apartment_img" db:"Apartment_Image"`
	Services        string                  `form:"service_id" db:"Service_Id"`
	Action          string                  `form:"action"`
	Banner_Id       int                     `form:"bannerid" db:"Banner_Id"`
	Banner          []*multipart.FileHeader `form:"banner" db:"banner"`
	Status          int64                   `form:"status" db:"Status"`
}

type UpdateProblemCategoryInput struct {
	Service_Id    int    `json:"serviceid" db:"Service_Id"`
	Problem_Id    int    `json:"problemid" db:"Problem_Id"`
	Problem_Name  string `json:"problem_name" db:"Problem_Name"`
	Language_Code int    `json:"language_code" default:"1"`
	Action        string `json:"action" binding:"required"`
}

type UpdateSrqTechInput struct {
	Srq_Id        int                   `form:"srq_id" binding:"required"`
	Acknowledge   string                `form:"acknowledge"`
	OldStatus     string                `form:"oldstatus"`
	NewStatus     string                `form:"newstatus"`
	TimeSlot      string                `form:"timeslot"`
	Language_Code int                   `form:"language_code" default:"1"`
	Image         *multipart.FileHeader `form:"srq_image" db:"Image_Path"`
	Comments      string                `form:"comments" db:"Technician_Comments"`
	Admin_Id      int                   `form:"adm_id" db:"Adm_Id"`
}
type GetConfirmationPinInput struct {
	Srq_Id int    `json:"srq_id" db:"Srq_Id" binding:"required"`
	Action string `json:"action"`
	Mobno  int64  `json:"mobno"  db:"User_Mobno"`
}

type UpdateApartmentParamInput struct {
	Apartment_Id int                   `form:"apartment_id" db:"Apartment_Id" binding:"required"`
	Param_Key    string                `form:"param_key" db:"Param_Key" binding:"required"`
	Param_Value  string                `form:"param_value" db:"Param_Value"`
	PARAM_SUB    string                `form:"param_sub" db:"PARAM_SUB"`
	Validity     string                `form:"validity" db:"Validity"`
	Action       string                `form:"action" binding:"required"`
	News_Image   *multipart.FileHeader `form:"news_img"`
}

type UpdateServiceRequestInput struct {
	User_Id            int                   `form:"user_id" db:"User_Id" binding:"required"`
	Srq_Id             int                   `form:"srq_id"  db:"User_Name"`
	Status             string                `form:"status"  db:"Srq_Stage_8"`
	Srq_Problem_Desc   string                `form:"problem_description"  db:"Srq_Problem_Desc"`
	Srq_Visit_Timeslot string                `form:"time_slot"  db:"Srq_Visit_Timeslot"`
	Srq_Image_Path     *multipart.FileHeader `form:"image_srq"  db:"Image_path"`
	Language_Code      int                   `form:"language_code" default:"1"`
	Payment_Mode       string                `form:"payment_mode" db:"Srq_Payment_Mode"`
	Payment_Status     string                `form:"payment_status" db:"Srq_Payment_Status"`
	Schedule_Slot      string                `form:"schedule_slot"`
}
type CreateOnlinePaymentIdInput struct {
	Total_Amount float32 `json:"amount" binding:"required"`
	ReceiptNo    string  `json:"receiptno" db:"Srq_Id" binding:"required"`
}
