"A date string with format `Y-m-d`, e.g. `2011-05-23`."
scalar Date @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\Date")

"A datetime string with format `Y-m-d H:i:s`, e.g. `2018-05-23 13:43:32`."
scalar DateTime @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\DateTime")

"A datetime and timezone string in ISO 8601 format `Y-m-dTH:i:sO`, e.g. `2020-04-20T13:53:12+02:00`."
scalar DateTimeTz @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\DateTimeTz")
"Can be used as an argument to upload files using https://github.com/jaydenseric/graphql-multipart-request-spec"
scalar Upload
  @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\Upload")
type Query {
    """
    Return:
    true : Es un comentario
    false : XDXD    
    """
    GetAllUsers(tipoUsuario:Int,estado:String):[User!]@field(resolver: "Users@GetAllUsers")
    #locales
    GetAllLocales:[Locales!]@field(resolver: "Locales@GetAllLocales")
    GetLocal(localId:Int):Locales@field(resolver: "Locales@GetLocal")
    #asiganciones
    GetAllAsignaciones(numberPaginate:Int,page:Int,estado:String):GetAsignaciones@field(resolver: "Asignacion@GetAllAsignaciones")
    GetAsignaciones(codigoTicket:String):Asignacion@field(resolver: "Asignacion@GetCodigoAsignaciones")
    #tareas
    GetAllTareas(numberPaginate:Int,page:Int,codigoTicket:String,estado:String):GetTareas@field(resolver: "TareasSupervision@GetAllTareas")
    

    GetDepartamentos:[Departamento!]@field(resolver: "Localizacion@GetDepartamentos")
    GetProvincias(DepCode:String):[Provincia!]@field(resolver: "Localizacion@GetProvincias")
    GetDistritos(ProCode:String):[Distrito!]@field(resolver: "Localizacion@GetDistritos")
    #generar pdf
    GetPdfReconocimientoLocal(codigoTicket:String):String@field(resolver: "GenerarPdf@ReporteRenocimientoLocal")
    #generar pdf
    GetPdfReconocimientoLocalFinal(codigoTicket:String):String@field(resolver: "GenerarPdf@ReporteRenocimientoLocalFinal")
    #generar excel
    GetReporteExcel(fechaInicial:String,fechaFinal:String,estado:String):String@field(resolver: "GenerarPdf@ReporteExcel")
    #traer adelantos
    GetAllAdelantoContratista(numberPaginate:Int,page:Int,estado:String):GetAdelantoContratista@field(resolver: "AdelantoContratista@GetAllAdelantoContratista")
    GetIdAdelantoContratista(adelantoId:Int):AdelantoContratista@field(resolver: "AdelantoContratista@GetCodigoAdelantoContratista")
}
type GetAdelantoContratista{
    NroItems:Int
    data:[AdelantoContratista!]
}
type GetTareas{
    NroItems:Int
    data:[TareasSupervisor!]
}
type GetAsignaciones{
    NroItems:Int
    data:[Asignacion!]
}
type GetLocales{
    NroItems:Int
    data:[Locales!]
}
type Imagenes{
    id:ID
    nombre:String
    url:String
}

type User {
    userId: ID
    tipoUsuario: Int
    tipoDocumento:Int
    nroDocumento: String
    nombres: String
    apellidos: String
    email:String
    estado:Int
    foto:String
    celular:String
    password:String
    apiToken:String
    banco:String
    nroCuenta:String
    cci:String
}
input UserInput {
    userId: ID
    tipoUsuario: Int
    tipoDocumento:Int
    nroDocumento: String
    nombres: String
    apellidos: String
    email:String
    estado:Int
    foto:String
    celular:String
    password:String
    apiToken:String
    banco:String
    nroCuenta:String
    cci:String
}
input CambiarContrasenaInput{
    id:ID
    password_nuevo:String
    password_antiguo:String
}
input loginInput{
    email: String
    password: String
}
type Locales{
    localId:ID
    nomLocal:String
    personalAtencion:String
    direccion:String
    imagen:String
    celular:String
    emailContacto:String
    formato:String
    DeparCodi:Int
    DeparNom:String
    ProvCodi:Int
    ProvNom:String
    DistCodi:Int
    DistNom:String
}
input LocalesInput{
    localId:ID
    nomLocal:String
    personalAtencion:String
    formato:String
    direccion:String
    celular:String
    emailContacto:String
    DeparCodi:Int
    ProvCodi:Int
    DistCodi:Int
}
type Asignacion{
    asignacionId:ID
    codigoTicket:String
    descripcionServicio:String
    direccionLocal:String
    latitud:String
    longitud:String
    estado:Int
    contratistaId:Int
    supervisorId:Int
    localId:Int
    finanzasId:Int
    

    tiempoEntrega:String
    ofertaValida:String
    correoAtencion:String
    celularAtencion:String
    fotoFichaVisita:Imagenes
    fotosInicio:[Imagenes]
    fotosFin:[Imagenes]
    observaciones:String
    comentariosAdicionales:String
    atencion:String
    rango:Int
    numerodeTecnicos:Int
    bono:String
    costoAdicional:Float

    documentoFirmado:String
    nroOperacion:String
    voucher:String
    documentoFactura:String
    ordenCompra:String
    documentoOT:String
    fechaInicioOriginal:String
    fechaInicioVigente:String
    fechaPago:String
    totalPrecioSupervisor:Float
    totalPrecioAdministrador:Float
    totalPrecioContratista:Float

    contratista:User
    supervisor:User
    fianza:User
    local:Locales
    AdelantoContratista:AdelantoContratista
    created_at:DateTime
    updated_at:DateTime
}
input AsignacionInput{
    asignacionId:ID
    codigoTicket:String
    descripcionServicio:String
    direccionLocal:String
    latitud:String
    longitud:String
    estado:Int
    contratistaId:Int
    supervisorId:Int
    localId:Int
    finanzasId:Int

    tiempoEntrega:String
    ofertaValida:String
    correoAtencion:String
    celularAtencion:String
    fotoFichaVisita:Int
    fotosInicio:[Int]
    fotosFin:[Int]
    observaciones:String
    comentariosAdicionales:String
    atencion:String
    rango:Int
    fechaInicioOriginal:String
    fechaInicioVigente:String
    fechaPago:String
    numerodeTecnicos:Int
    bono:String
    costoAdicional:Float
    
    nroOperacion:String


}
type TareasSupervisor{
    tareaId:ID
    horario:Int
    descripcion:String
    observacion:String
    unidadMedida:String
    cantidad:Int
    estado:Int
    precioSupervisor:Float
    precioAdministrador:Float
    precioContratista:Float
    codigoTicket:String
    created_at:DateTime
    updated_at:DateTime
}
input TareasSupervisorInput{
    tareaId:ID
    horario:Int
    descripcion:String
    observacion:String
    unidadMedida:String
    cantidad:Int
    estado:Int
    precioSupervisor:Float
    precioAdministrador:Float
    precioContratista:Float
    codigoTicket:String
}
type AdelantoContratista{
    adelantoId:Int
    codigoTicket:String
    monto:Float
    estado:Int
    fecha:String
    asignacionId:Int
    contratistaId:Int
    contratista:User
    Asignacion:Asignacion
    
}
input AdelantoContratistaInput{
    adelantoId:Int
    codigoTicket:String
    monto:Float
    estado:Int
    fecha:String
    asignacionId:Int
    contratistaId:Int
}

type Departamento{
    DeparCodi:ID
    DeparNom:String
}
type Provincia{
    ProvCodi:ID
    ProvNom:String
    DeparCodi:Int
}
type Distrito{
    DistCodi:ID
    DistNom:String
    ProvCodi:Int
}
####mutation sucursal ####
type Mutation {
    CreateAdelantoContratista(
        input:AdelantoContratistaInput! @spread
    ): AdelantoContratista @field(resolver: "CrudAdelantoContratista@create")
    UpdateAdelantoContratista(
        input:AdelantoContratistaInput! @spread
    ): AdelantoContratista @field(resolver: "CrudAdelantoContratista@update")
    DeleteAdelantoContratista(
        input:AdelantoContratistaInput! @spread
    ): String @field(resolver: "CrudAdelantoContratista@delete")


    UpdateDocumentoOT(
        input:AsignacionInput @spread,
        documentoOT:Upload
    ): Asignacion @field(resolver: "CrudAsignacion@UpdateDocumentoOT")

    UpdateOrdenCompra(
        input:AsignacionInput @spread,
        ordenCompra:Upload
    ): Asignacion @field(resolver: "CrudAsignacion@UpdateOrdenCompra")

    UpdateDocumentoFactura(
        input:AsignacionInput @spread,
        documentoFactura:Upload
    ): Asignacion @field(resolver: "CrudAsignacion@UpdateDocumentoFactura")

    UpdateVoucher(
        input:AsignacionInput @spread,
        voucher:Upload
    ): Asignacion @field(resolver: "CrudAsignacion@UpdateVoucher")

    UpdateDocumentoFirmado(
        input:AsignacionInput @spread,
        documentoFirmado:Upload
    ): Asignacion @field(resolver: "CrudAsignacion@UpdateDocumentoFirmado")

    UpdateTareaAdministrador(
        input:[TareasSupervisorInput]! @spread
    ): [TareasSupervisor!] @field(resolver: "CrudTareasSupervision@UpdateTareaAdministrador")

    UpdatePreciosContratista(
        input:[TareasSupervisorInput]! @spread
    ): [TareasSupervisor!] @field(resolver: "CrudTareasSupervision@updatePreciosContratista")

    CreateTareasSupervisor(
        input:[TareasSupervisorInput]! @spread
    ): [TareasSupervisor!] @field(resolver: "CrudTareasSupervision@create")
    UpdateTareasSupervisor(
        input:[TareasSupervisorInput]! @spread
    ): [TareasSupervisor!] @field(resolver: "CrudTareasSupervision@update")
    DeleteTareasSupervisor(
        input:[Int]! @spread
    ): String @field(resolver: "CrudTareasSupervision@delete")

    UpdateReconocimientoLocal(
        input:AsignacionInput! @spread
    ): Asignacion @field(resolver: "CrudAsignacion@updateReconocimentoLocal")

    CreateImage(
        imagen:Upload! @spread,
        nombre:String @spread
    ): Imagenes @field(resolver: "CrudImagenes@create")

    CreateAsignacion(
        input:AsignacionInput! @spread
    ): Asignacion @field(resolver: "CrudAsignacion@create")
    UpdateAsignacion(
        input:AsignacionInput! @spread
    ): Asignacion @field(resolver: "CrudAsignacion@update")
    DeleteAsignacion(
        input:AsignacionInput! @spread
    ): String @field(resolver: "CrudAsignacion@delete")

    CreateLocal(
        input:LocalesInput! @spread,
        imagen:Upload
    ): Locales @field(resolver: "CrudLocales@create")
    UpdateLocal(
        input:LocalesInput! @spread,
        imagen:Upload
    ): Locales @field(resolver: "CrudLocales@update")
    DeleteLocal(
        input:LocalesInput! @spread
    ): String @field(resolver: "CrudLocales@delete")


    login(
        input:loginInput! @spread
    ): User @field(resolver: "AuthMutator@auth")
    CambiarContrasenaUsuario(
        input:CambiarContrasenaInput! @spread,
    ): User @field(resolver: "AuthMutator@CambiarContrasena")
    CrearUsuario(
        input:UserInput! @spread,
        foto:Upload
    ): User @field(resolver: "AuthMutator@CrearUsuario")
    RecuperarContraUsuario(
        input:UserInput! @spread
    ): User @field(resolver: "AuthMutator@RecuperarContrasena")
    UpdateUsuario(
        input:UserInput @spread,
        foto:Upload
    ): User @field(resolver: "AuthMutator@UpdateUsuario")
    DeleteUsuario(
        input:UserInput @spread
    ): String @field(resolver: "AuthMutator@DeleteUsuario")
}