package com.hepl.tunefortwo.dto;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.hepl.tunefortwo.config.jackson.ForceStringDeserializer;

import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema.AccessMode;
import jakarta.validation.constraints.FutureOrPresent;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class FormRequestDtoCoAdmin {
	  @Schema(accessMode = AccessMode.READ_ONLY)
	    private String id;
//	    @NotBlank(message = "{validation.user.usernameCannotBeEmpty}")
//	    @Size(max = 60, message = "{validation.user.usernameMustBeMaximumOf_60Characters}")
//	    @Pattern(regexp = "^[a-zA-Z\\s]*$", message = "{validation.user.usernameCannotContainSpecialCharacters}")
	    @Schema(accessMode = AccessMode.READ_WRITE)
		private String name;
//	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED,accessMode = AccessMode.READ_WRITE)
//	    @Pattern(regexp = "^[a-z0-9]{1,25}(?:[._+][a-z0-9]+)*@[a-z0-9.-]+\\.[a-z]{2,}$", message = "{validation.user.emailIsInvalid}")
//		private String mail;
//	    @NotBlank(message = "{validation.user.mobileCannotBeEmpty}")
////	    @Pattern(regexp = "^[+]*[(]?\\d{1,4}[)]?[-\\s\\./0-9]{10,15}$", message = "{validation.user.mobileNoIsInvalid}")
//	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED, description = "Encrypt data using AES/GCM")
//	    @JsonDeserialize(using = ForceStringDeserializer.class)
//		private String phonenumber;
	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
		private String instrument;
	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
		private String mood;
	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
		private String lanuage;	
	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
		private String artist;
	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
		private String songto;
	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
		private String songfrom;
	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
		private String occasion;
	    @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
	    @Size(min = 0, max = 750,  message = "{validation.user.userstoryMustBeMaximumOf_750Characters}")
		private String story;
		@Schema(accessMode = AccessMode.WRITE_ONLY, description = "Clip file MP3 format", required = false)
	    @NotNull(message = "Clip file must be provided")
		private MultipartFile clip;
		@Schema(accessMode = AccessMode.READ_WRITE)
		private Double clipDuration ;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private String clipPath;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private String orderNumber;
//	    @Schema(accessMode = AccessMode.READ_ONLY)
//		private String screenshot;
	    @Schema(accessMode = AccessMode.READ_ONLY)
		private LocalDateTime createdDate;
	    @Schema(accessMode = AccessMode.WRITE_ONLY)
	    private MixtureMaster masterRequest;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private String status;
	    @Schema(accessMode=AccessMode.READ_WRITE)
	    @FutureOrPresent(message = "{validation.user.usercustomerDeliveryDateShouldBeInPresentorFuture}")
	    private LocalDate customerDeliveryDate;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    @FutureOrPresent(message =  "{validation.user.userDeliveryDateShouldBeInPresentorFuture}")
		private LocalDate deliveryDate;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private List<OrderTrackerDto> orderPosition;
	    @Schema(accessMode=AccessMode.READ_ONLY)
	    private String durationInMMSS;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    @Size(min = 0, max = 750,  message = "{validation.user.usercommentsMustBeMaximumOf_750Characters}")
	    private String comments;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private String mixtureMaster;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private String rating;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    @Size(min = 0, max = 750,  message = "{validation.user.userreviewMustBeMaximumOf_750Characters}")
	    private String review;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private List<String> images;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private String adminClipPath;
	    @Schema(accessMode = AccessMode.READ_ONLY)
	    private String videoPath;
//	    @Schema(accessMode = AccessMode.READ_WRITE)
//	    private Double orderTotal;
}
