import { IsEmail, IsNotEmpty, IsString, IsOptional, IsNumber, IsArray, ArrayNotEmpty, IsBoolean } from "class-validator";
import { ApiProperty } from '@nestjs/swagger';
import { Types } from 'mongoose';
import { Transform } from "class-transformer";

export enum type {
    MEMBERSHIP = 'MEMBERSHIP',
    SUBSCRIPTION = 'SUBSCRIPTION',
}

export class adminLogin {

    @ApiProperty({ default: "admin@gmail.com" })
    @IsEmail({}, { message: 'Please enter valid email Address' },)
    @IsNotEmpty()
    email: string;

    @ApiProperty({ default: "qwerty" })
    @IsString()
    @IsNotEmpty()
    password: string;

    @ApiProperty({ required: false })
    @IsOptional()
    @IsString()
    fcm_token?: string;

}

export class adminData {
    user_data: any
}


export class editProfile {
    @ApiProperty()
    @IsOptional()
    @IsString()
    name: string;

    @ApiProperty()
    @IsOptional()
    @IsString()
    profile_pic: string;
}


export class membership {

    @ApiProperty()
    @IsOptional()
    @IsString()
    name: string;

    @ApiProperty({ type: [String], isArray: true })
    @IsArray()
    @IsOptional()
    @IsString({ each: true })
    @ArrayNotEmpty()
    description: string[];

    @ApiProperty()
    @IsOptional()
    amount: number

    @ApiProperty()
    @IsOptional()
    discount: number
}


export enum drop_type {
    PICKUP = "PICKUP",
    DROPOFF = "DROPOFF"
}

export class crop_pickup_listing {

    @ApiProperty({ required: false, enum: drop_type, default: drop_type.DROPOFF })
    @IsString()
    type: string;

    @Transform(({ value }) => parseInt(value))
    @ApiProperty({ required: false })
    @IsNumber()
    @IsOptional()
    pagination: number;

    @Transform(({ value }) => parseInt(value))
    @ApiProperty({ required: false })
    @IsNumber()
    @IsOptional()
    limit: number;
}

export class edit_membership {
    @ApiProperty()
    @IsOptional()
    @IsString()
    membership_id: string;

    @ApiProperty()
    @IsOptional()
    @IsString()
    name: string;

    @ApiProperty({ type: [String], isArray: true })
    @IsArray()
    @IsOptional()
    @IsString({ each: true })
    @ArrayNotEmpty()
    description: string[];

    @ApiProperty()
    @IsOptional()
    amount: number

    @ApiProperty()
    @IsOptional()
    discount: number
}


export class benefits {
    @ApiProperty({ required: false, enum: Object.values(type), default: type.MEMBERSHIP })
    @IsString()
    @IsOptional()
    type: string;

    @ApiProperty()
    @IsOptional()
    @IsString()
    benefits: string;

    @ApiProperty()
    @IsOptional()
    @IsString()
    image: string;
}

export class list_membership {

    @ApiProperty({ required: false, enum: Object.values(type), default: type.MEMBERSHIP })
    @IsString()
    @IsOptional()
    type: string;

}

export class adminChangePass {
    @ApiProperty()
    @IsString()
    oldPassword: string;

    @ApiProperty()
    @IsString()
    newPassword: string;
}

export class Commission {

    @ApiProperty()
    commission: number

    @ApiProperty()
    driver_fee: number

    @ApiProperty()
    delivery_fee: number

    @ApiProperty()
    platform_fee: number

    @ApiProperty()
    entry_fee: number

    @ApiProperty()
    @IsOptional()
    driver_agent_commission: number

    @ApiProperty()
    @IsOptional()
    farmer_agent_commission: number

}

export class staffCreate {


    @ApiProperty({ default: "admin" })
    @IsOptional()
    @IsString()
    name: string;

    @ApiProperty({ default: "admin@gmail.com" })
    @IsOptional()
    @IsString()
    email: string;

    @ApiProperty({ default: "qwerty" })
    @IsString()
    @IsOptional()
    password: string;

    @ApiProperty({ required: false })
    @IsOptional()
    @IsArray()
    roles?: string[];


    @ApiProperty({ default: "qwerty" })
    @IsString()
    @IsOptional()
    profile_pic: string;


    @ApiProperty({ default: "qwerty" })
    @IsString()
    @IsOptional()
    phone_no: string;


    @ApiProperty({ default: "qwerty" })
    @IsString()
    @IsOptional()
    country_code: string;
}


export class addDropOffLocations {
    // @ApiProperty({ type: String })
    // @IsOptional()
    // address_type: string

    @ApiProperty({ required: false })
    @IsOptional()
    @IsString()
    address: string;

    @ApiProperty({ required: false })
    @IsOptional()
    @IsString()
    store_name: string;

    @ApiProperty({ required: false })
    @IsNumber()
    // @IsNotEmpty({message:"lat field is mandatory"})
    lat: number

    @ApiProperty({ required: false })
    @IsNumber()
    // @IsNotEmpty({message:"lang field is mandatory"})
    lng: number
}

export class dropOffLocationEdit {

    @ApiProperty()
    @IsString()
    drop_off_id: string;

    @ApiProperty()
    @IsBoolean()
    is_active: boolean;

}

export class pickupenable {

    @ApiProperty()
    @IsBoolean()
    is_enable: boolean;

}

export enum contact_us_status {
    PENDING = "PENDING",
    RESOLVE = "RESOLVE",
    REJECT = "REJECT"
}
export class contactUs {

    @ApiProperty({ enum: contact_us_status, default: contact_us_status.RESOLVE })
    @IsString()
    status: string;

    @Transform(({ value }) => parseInt(value))
    @ApiProperty({ required: false })
    @IsNumber()
    @IsOptional()
    pagination: number;

    @Transform(({ value }) => parseInt(value))
    @ApiProperty({ required: false })
    @IsNumber()
    @IsOptional()
    limit: number;

}

export enum payout_type {
    DRIVER = "DRIVER",
    DRIVER_AGENT = "DRIVER_AGENT",
    FARMER = "FARMER",
    FARMER_AGENT = "FARMER_AGENT",
    VENDOR = "VENDOR",
}

export class payut_type {

    @ApiProperty({ required: false, enum: payout_type, default: payout_type.DRIVER })
    @IsString()
    @IsOptional()
    type: string;

    @Transform(({ value }) => parseInt(value))
    @ApiProperty({ required: false })
    @IsNumber()
    @IsOptional()
    pagination: number;

    @Transform(({ value }) => parseInt(value))
    @ApiProperty({ required: false })
    @IsNumber()
    @IsOptional()
    limit: number;

}
export enum contact_us_status_edit {
    RESOLVE = "RESOLVE",
    REJECT = "REJECT"
}

export class contactUsEdit {

    @ApiProperty()
    @IsString()
    contact_us_id: string;

    @ApiProperty({ enum: contact_us_status_edit, default: contact_us_status_edit.RESOLVE })
    @IsString()
    status: string;

    @ApiProperty()
    @IsString()
    @IsOptional()
    reason: string;

}

